pyodbc连接字符串sql server身份验证

时间:2014-02-28 23:25:57

标签: python sql sql-server database-connection connection-string

我知道这个问题已在网上多次被问到,导致许多不同的解决方案都没有对我有用。

对于我的场景,我尝试与MS Sql数据库进行简单连接,只使用Windows身份验证连接服务帐户用户名和密码,这不是我的任务选项。

这是我提供的连接字符串:

databaseConnection = 'DRIVER={SQL Server}; SERVER=ServerName; Database=DatbaseName; UID=UserId; PWD=password;'

这是我在尝试运行脚本时收到的错误:

    dbConnection = pyodbc.connect(DATABASE.databaseConnection)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver]
[SQL Server]Cannot open database "XXXX" requested by the login. The login failed.
(4060) (SQLDriverConnect); [42000] [Microsoft][ODBC SQL Server Driver]
[SQL Server]Cannot open database "XXXX" requested by the login. The login failed. (4060)')

这个连接字符串有什么不正确的吗?我仔细检查了用户名和密码,然后将其粘贴到SQL Server Management Studio并从那里登录到数据库并且成功。

3 个答案:

答案 0 :(得分:1)

我自己遇到了这个问题,我通过访问Microsoft SQL Server管理工作室并手动将数据库连接到您登录数据库的用户帐户来修复它。

要做到这一点:

  • 打开Microsoft SQL Server管理工作室并连接到您的服务器。
  • 转到登录,右键单击正确的用户,然后转到属性。
  • 在左上方有一个面板(标题为"选择一个页面")。转到用户映射。
  • 在显示的表格中,显示用户(第二行)的位置,键入您正在使用的数据库旁边的用户名。

当你在场时,请查看底部的面板。在显示Database role membership for:{database name}的位置时,请务必检查db_datareaderdb_datawriter

答案 1 :(得分:0)

以下是使用sqlalchemy的连接字符串的一种方法(请参见https://www.sqlalchemy.org/):

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from db import Db

#Get localhost DB
engine = create_engine('mssql+pyodbc://myDbUser:myDbPassword@localhost:1433/MyDatabase?driver=SQL+Server+Native+Client+11.0?trusted_connection=no')

DBSession = sessionmaker(bind=engine)

session = DBSession()
db = Db(session)
print "the widget number is: "+db.widgetNumber

答案 2 :(得分:0)

我遇到了同样的问题,问题出在数据库名称上。

我将数据库名称放在括号中,例如[DB_NAME],但是,一旦将括号移到DB_NAME上,它就可以正常工作。

请尝试一下。