下面的pyodbc连接工作正常:

import pyodbc
import pandas as pd
conn = pyodbc.connect(Driver='SQL Server',
                      Server='some_server_address,1433',
                      Database='some_db',
                      UID ='some_user',
                      PWD = 'some_password')

cursor = conn.cursor()
df = pd.read_sql_query('''select top 100 * from tableA''', conn)
cursor.close()
conn.close()

当我try 与SQLAchlory相同时,它失败了

from sqlalchemy.engine import URL
from sqlalchemy import create_engine
import sqlalchemy as sa
    
connection_string = "DRIVER={SQL Server};SERVER=some_server_address,1433;DATABASE=some_db;UID=some_user;PWD=some_password"
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
engine = create_engine(connection_url)
conn = engine.connect()

错误如下:

InterfaceError: (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'some_user'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'some_user'. (18456)")
(Background on this error at: https://sqlalche.me/e/20/rvf5)

我该怎么办?

Update 正如下面所建议的,我try 了

import pyodbc
import pandas as pd
connection_string = "DRIVER={SQL Server};SERVER=some_server_address,1433;DATABASE=some_db;UID=some_user;PWD=some_password"
conn = pyodbc.connect(connection_string)
    
cursor = conn.cursor()
df = pd.read_sql_query('''select top 100 * from tableA''', conn)
cursor.close()
conn.close()

一切工作完美

推荐答案

您在SQLAchlchemy中遇到了一个bug.这里有报告说:

https://github.com/sqlalchemy/sqlalchemy/issues/11250

作为一个解决方案,你可以使用单独的kwargs与URL.create(),类似于你为.pyodbc.connect()所做的:

import sqlalchemy as sa

engine = sa.create_engine(
    sa.URL.create(
        "mssql+pyodbc",
        username="howie",
        password="ab+cd",
        host="192.168.0.199",
        port=1433,
        database="test",
        query=dict(driver="SQL Server")
    )
)

Python相关问答推荐

配置Sweetviz以分析对象类型列,而无需转换

Locust请求中的Python和参数

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

使用miniconda创建环境的问题

如何访问所有文件,例如环境变量

在Pandas DataFrame操作中用链接替换'方法的更有效方法

Python虚拟环境的轻量级使用

如何在Python脚本中附加一个Google tab(已经打开)

OR—Tools CP SAT条件约束

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

提取相关行的最快方法—pandas

Polars将相同的自定义函数应用于组中的多个列,

基于Scipy插值法的三次样条系数

计算空值

我对这个简单的异步者的例子有什么错误的理解吗?

如何在信号的FFT中获得正确的频率幅值

如何在Python中自动创建数字文件夹和正在进行的文件夹?

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

使用pythonminidom过滤XML文件