【发布时间】:2017-02-15 17:05:42
【问题描述】:
尝试将 python sqlalchemy 连接到 msssql 服务器/数据库时,我一直遇到一个奇怪的错误。我需要使用 sqlalchemy,因为它是(据我所知)将 pandas 数据帧连接到 mssql 的唯一方法。
我尝试了两种不同的方式连接 sqlalchemy:
-
使用完整的连接字符串:
import sqlalchemy as sa import urllib.parse as ulp usrCnnStr = r'DRIVER={SQL Server};SERVER=myVoid\MYINSTANCE;Trusted_Connection=yes;' usrCnnStr = ulp.quote_plus(usrCnnStr) usrCnnStr = "mssql+pyodbc:///?odbc_connect=%s" % usrCnnStr engine = sa.create_engine(usrCnnStr) connection = engine.connect() connection.execute("select getdate() as dt from mydb.dbo.dk_rcdtag") connection.close() -
使用 DSN:
import sqlalchemy as sa import urllib.parse as ulp usrDsn = 'myDb' params = ulp.quote_plus(usrDsn) engine = sa.create_engine("mssql+pyodbc://cryo:pass@myDb") conn = engine.connect() conn.execute('select getdate() as dt') conn.close()
两种方法都返回相同的错误:
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('ODBC data type -150 is not supported. Cannot read column .', 'HY000') [SQL: "SELECT SERVERPROPERTY('ProductVersion')"]
我不知道如何解决这个错误;当我在 mssql 中执行“SELECT SERVERPROPERTY('ProductVersion')”时,它工作正常,但返回的数据类型为“sql_variant”。
有没有办法解决这个问题?
【问题讨论】:
-
您是否尝试过先通过
pyodbc直接连接?你使用的是什么版本的 Python、pyodbc 和 SQL Alchemy? -
@FlipperPA 我尝试使用 pyodbc 进行连接(这是我的第一选择),但 pandas Dataframe.to_sql() 在连接到 mssql 数据库时需要 sqlalchemy 连接。
-
@zzzeek 经过测试并确认问题已通过 sqlalchemy v1.1.1 解决 - 谢谢!
标签: python sql-server sqlalchemy pyodbc