sqlalchemy 使用哪个确切的驱动程序?
Which exact driver is sqlalchemy using?
我在使用 pyinstaller 时遇到 MS SQL 连接问题。当 运行 处于交互模式时,一切都按预期进行。编译为 exe 后,MS SQL 数据库连接在第一次查询时超时并出现以下错误:
(pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [53]. (53) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expire (0); ...
我的连接字符串类似于以下内容:
create_engine(
"mssql+pyodbc://USER:PASSWORD@SERVERIP/DB_NAME?driver=ODBC+Driver+17+for+SQL+Server"
)
在尝试诊断问题时,我使用 pyodbc.drivers()
打印出可用于 pyodbc 的驱动程序(这表明编译和交互中的可用驱动程序之间存在很大差异)以及正在使用的驱动程序使用
print(session.bind.dialect.name)
> pyodbc
print(session.bind.dialect.driver)
> mssql
它 returns 正在使用的上层 python 模块,而不是在较低层处理它的 .dll。有什么方法可以找到正在使用的确切驱动程序吗?对于可能导致编译版本中的错误的任何提示,我们也将不胜感激。
问题可能出在您的连接字符串中。
要创建正确的连接字符串以使用 sqlAlchemy 连接到 MSSQL Server ODBC 驱动程序,请使用以下命令:
import urllib
from sqlalchemy import create_engine
server = 'serverName\instanceName,port' # to specify an alternate port
database = 'mydb'
username = 'myusername'
password = 'mypassword'
params = urllib.parse.quote_plus('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+password)
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
另外,您可以查看以下文章Connecting to Microsoft SQL Server using SQLAlchemy and PyODBC
Is there any way to find which exact driver [.dll] is being used?
import pyodbc
cnxn = engine.raw_connection()
print(cnxn.getinfo(pyodbc.SQL_DRIVER_NAME)) # msodbcsql17.dll
print(cnxn.getinfo(pyodbc.SQL_DRIVER_VER)) # 17.08.0001
我在使用 pyinstaller 时遇到 MS SQL 连接问题。当 运行 处于交互模式时,一切都按预期进行。编译为 exe 后,MS SQL 数据库连接在第一次查询时超时并出现以下错误:
(pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [53]. (53) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expire (0); ...
我的连接字符串类似于以下内容:
create_engine(
"mssql+pyodbc://USER:PASSWORD@SERVERIP/DB_NAME?driver=ODBC+Driver+17+for+SQL+Server"
)
在尝试诊断问题时,我使用 pyodbc.drivers()
打印出可用于 pyodbc 的驱动程序(这表明编译和交互中的可用驱动程序之间存在很大差异)以及正在使用的驱动程序使用
print(session.bind.dialect.name)
> pyodbc
print(session.bind.dialect.driver)
> mssql
它 returns 正在使用的上层 python 模块,而不是在较低层处理它的 .dll。有什么方法可以找到正在使用的确切驱动程序吗?对于可能导致编译版本中的错误的任何提示,我们也将不胜感激。
问题可能出在您的连接字符串中。
要创建正确的连接字符串以使用 sqlAlchemy 连接到 MSSQL Server ODBC 驱动程序,请使用以下命令:
import urllib
from sqlalchemy import create_engine
server = 'serverName\instanceName,port' # to specify an alternate port
database = 'mydb'
username = 'myusername'
password = 'mypassword'
params = urllib.parse.quote_plus('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+password)
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
另外,您可以查看以下文章Connecting to Microsoft SQL Server using SQLAlchemy and PyODBC
Is there any way to find which exact driver [.dll] is being used?
import pyodbc
cnxn = engine.raw_connection()
print(cnxn.getinfo(pyodbc.SQL_DRIVER_NAME)) # msodbcsql17.dll
print(cnxn.getinfo(pyodbc.SQL_DRIVER_VER)) # 17.08.0001