ttb*_*ack 8 sql-server sqlalchemy sqlcmd pyodbc
所以我在使用远程MS SQL Server进行sqlalchemy和pyodbc时遇到了一些麻烦.本地sqlcmd工作正常但不是当我尝试通过python代码读取数据库时.任何帮助,将不胜感激.
环境:
以下sqlcmd正常工作
sqlcmd -S {Host},{Port} -U {USER} -P {PWD} -Q "use {Database};"
Run Code Online (Sandbox Code Playgroud)
试图直接使用sqlalchemy或pyodbc不起作用.错误:
pyodbc.OperationalError:('HYT00',u'[HYT00] [unixODBC] [Microsoft] [SQL Server的ODBC驱动程序17]登录超时过期(0)(SQLDriverConnect)')
代码:尝试使用pyodbc
conn = pyodbc.connect(
r'DRIVER={ODBC Driver 17 for SQL Server};'
r'SERVER=HOST,PORT;'
r'DATABASE=DATABASE;'
r'UID=UID;'
r'PWD=PWD'
)
Run Code Online (Sandbox Code Playgroud)
尝试使用sqlalchemy:
create_engine('mssql+pyodbc://{user}:{password}@{host}:{port}/{database}?driver={driver}'.format(
user=user,
password=password,
host=host,
database=database,
port=port,
driver="ODBC+Driver+17+for+SQL+Server"
)).connect()
Run Code Online (Sandbox Code Playgroud)
如果我从命令中删除端口,我可以使用sqlcmd重现错误,所以我传递给pyodbc的conn_string可能格式不正确吗?
就我而言,当我没有正确转义具有特殊字符的密码时,就会发生这种情况。这是我的解决方案:
from urllib.parse import quote
...
passwd = 'p@ssw0rd!'
...
engine_string = f"mssql+pyodbc://{user}:{quote(passwd)}@{host}/{name}?driver=ODBC+Driver+17+for+SQL+Server"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3486 次 |
| 最近记录: |