使用pyodbc将数据帧写入sql db会出错

问题描述

我有一个Synapse数据库,正在从中读取一些表以创建数据框。我正在使用下面的方法连接和读取数据库表:

server = 'gbs-marcus-dev-dw.database.windows.net' 
database = 'romeo' 
username = 'romeouser' 
password = 'romeopass' 
driver = 'ODBC Driver 17 for sql Server' 

cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()


# select command
query = ''' SELECT * FROM dbo.Masterdata''';
df_input_orig = pd.read_sql(query,cnxn)


pyodbc.drivers() 

['sql Server','ODBC Driver 17 for sql Server']


创建数据帧后,我正尝试将结果数据帧写回到数据库中,我正在遵循以下两个方法,这两个方法均会产生不同的错误

方法1:

engine = sqlalchemy.create_engine("mssql+pyodbc://romeouser:romeopass@gbs-marcus-dev-dw.database.windows.net/romeo?driver=ODBC+Driver+17+for+sql+Server",echo=False)
Insight_instance.to_sql(name='Insight_Instance',con=engine,index=False,if_exists='append')
cursor.execute('commit')

方法1出错:

ProgrammingError: (pyodbc.ProgrammingError) ('42000','[42000] [Microsoft][ODBC Driver 17 for sql Server][sql Server]111214;An attempt to complete a transaction has Failed. No corresponding transaction found. (111214) (sqlEndTran)')
(Background on this error at: http://sqlalche.me/e/13/f405)

方法2:

import pyodbc
import sqlalchemy
import urllib

params = urllib.parse.quote_plus("DRIVER=driver;SERVER=gbs-marcus-dev-dw.database.windows.net;DATABASE=romeo;UID=romeouser;PWD=romeopass")
engine = sqlalchemy.create_engine("mssql+pyodbc://romeouser:romeopass@gbs-marcus-dev-dw.database.windows.net/romeo",echo=False)
engine.connect()
Insight_instance.to_sql(name='Insight_Instance',if_exists='append')

方法2出现错误

InterfaceError: (pyodbc.InterfaceError) ('IM002','[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (sqlDriverConnect)')
(Background on this error at: http://sqlalche.me/e/13/rvf5)

我对此很陌生,不知道我在哪里或做错了什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)