Как подключиться к SQL Server используя SQL Alchemy?

Необходимо соединиться с SQL Server, чтобы в уже существующую там таблицу закачать строки CSV файла. Подключение осуществляется через pyodbc + SQLAlchemy.

Скрипт связки с таблицей:

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=название_сервера;'
                      'Database=название_БД;'
                      'username=юзер;'
                      'password=пароль;')

cursor = conn.cursor()

sql_query = pd.read_sql_query('SELECT * FROM [dbo].[название_таблицы]',conn)

select работает - соединение установлено.

Далее, скрипт добавления строк в таблицу:

from sqlalchemy import create_engine
engine = create_engine('mssql+pyodbc://имя_юзера:пароль@мой_дсн')
датафрейм.to_sql("[dbo].[название_таблицы]", engine, index=False, if_exists="append")

Но данный скрипт, вместо добавления строк в уже существующую таблицу хочет создавать новую таблицу и выходит данная ошибка:

 (pyodbc.ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Разрешение CREATE TABLE запрещено в базе данных "master". (262) (SQLExecDirectW)')
[SQL: 
CREATE TABLE

P.S.

  1. я по-разному пыталась написать таблицу: "[dbo].[название_таблицы]", "[название_таблицы]", "название_таблицы"- все равно не работает.
  2. я знаю про библиотеку pymssql, но она discontinued и ее необходимо подключать через виртуальное пространство, я думаю, что могут возникнуть проблемы в связи с этим в дальнейшем.

Ответы (2 шт):

Автор решения: MaxU

Пример из документации SQL Alchemy:

import urllib
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")

engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

PS в зависимости от версии ODBC и версии SQL Server возможно придется подбирать версию драйвера вместо {SQL Server Native Client 11.0}.

Таблица из документации по Microsoft SQL Server

→ Ссылка
Автор решения: Константин Коваленко

В моём случае помог следующий драйвер(pymssql):

    import sqlalchemy

    conn = 'mssql+pymssql://Логин:Пароль@Имя_сервера/Имя_базы?charset=utf8'

    engine = sqlalchemy.create_engine(conn)
    connect = engine.connect()
    inspector = sqlalchemy.inspect(engine)
    print(inspector.get_table_names())

Возможно кому-то окажется полезным.

Ссылка на документацию: https://docs.sqlalchemy.org/en/20/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pymssql

→ Ссылка