Pandas &引用;“数据源名称太长”;mssql+错误;炼金术中的pyodbc
我正在尝试使用SQLAlchemy和pyobdc将数据帧上载到Azure SQL Server数据库上的数据库。我已经建立了连接,但当上传时,我得到一个错误,上面写着 (pyodbc.Error)('IM010'、'[IM010][Microsoft][ODBC驱动程序管理器]数据源名称太长(0)(SQLDriverConnect) 我不确定这个错误是从哪里来的,因为我以前使用过sqlalchemy,没有任何问题。我在下面附上了我的代码,有人能帮我诊断这个问题吗Pandas &引用;“数据源名称太长”;mssql+错误;炼金术中的pyodbc,pandas,sqlalchemy,azure-sql-database,etl,pyodbc,Pandas,Sqlalchemy,Azure Sql Database,Etl,Pyodbc,我正在尝试使用SQLAlchemy和pyobdc将数据帧上载到Azure SQL Server数据库上的数据库。我已经建立了连接,但当上传时,我得到一个错误,上面写着 (pyodbc.Error)('IM010'、'[IM010][Microsoft][ODBC驱动程序管理器]数据源名称太长(0)(SQLDriverConnect) 我不确定这个错误是从哪里来的,因为我以前使用过sqlalchemy,没有任何问题。我在下面附上了我的代码,有人能帮我诊断这个问题吗 username = 'bcad
username = 'bcadmin'
password = 'N@ncyR2D2'
endpoint = 'bio-powerbi-bigdata.database.windows.net'
engine = sqlalchemy.create_engine(f'mssql+pyodbc://{username}:{password}@{endpoint}')
df.to_sql("result_management_report",engine,if_exists='append',index=False)
我知道其他ETL方法,如数据工厂和SSMS,但我更喜欢使用pandas作为ETL过程
请帮我解决这个错误。这里有三个问题:
@
字符,则需要在连接URI中对其进行转义mssql+pyodbc
方言,必须在URI中包含数据库名称,以便SQLAlchemy识别“主机名”连接(与“DSN”连接相反)mssql+pyodbc
主机名连接,必须使用driver
属性提供ODBC驱动程序名称sqlalchemy.engine.url.url
方法:
将sqlalchemy作为sa导入
my_uid=“bcadmin”
我的_pwd=”N@ncyR2D2"
my_host=“bio powerbi bigdata.database.windows.net”
my_db=“master”
my_odbc_driver=“SQL Server的odbc驱动程序17”
连接_uri=sa.engine.url.url(
“mssql+pyodbc”,
用户名=我的uid,
密码=我的密码,
主机=我的主机,
database=my_db,#必需;不是空字符串
query={“driver”:my_odbc_driver},
)
打印(连接uri)
“”“控制台输出:
mssql+pyodbc://bcadmin:N%40ncyR2D2@bio powerbi bigdata.database.windows.net/master?driver=ODBC+driver+17+for+SQL+Server
"""
engine=sa.create\u engine(连接uri,fast\u executemany=True)
也许可以尝试在端点名称后显式添加:1433
。看起来SQLA/pyodbc正在将服务器名称解释为DSN名称。请转义您的密码,它包含@
@IljaEverilä我尝试转义密码,但没有修复错误。加上:1433也没有帮助。我想知道可能是什么问题。您的URL缺少区分它与DSN连接所需的尾随/
,因此主机名被视为DSN(请参阅)。@IljaEveriläHi Ilja我尝试了尾随/但似乎也不起作用。我迷路了。