Как подключиться к 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.
- я по-разному пыталась написать таблицу: "[dbo].[название_таблицы]", "[название_таблицы]", "название_таблицы"- все равно не работает.
- я знаю про библиотеку pymssql, но она discontinued и ее необходимо подключать через виртуальное пространство, я думаю, что могут возникнуть проблемы в связи с этим в дальнейшем.
Ответы (2 шт):
Пример из документации 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}.
В моём случае помог следующий драйвер(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