我知道这个问题已在网上多次被问到,导致许多不同的解决方案都没有对我有用。
对于我的场景,我尝试与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并从那里登录到数据库并且成功。
答案 0 :(得分:1)
我自己遇到了这个问题,我通过访问Microsoft SQL Server管理工作室并手动将数据库连接到您登录数据库的用户帐户来修复它。
要做到这一点:
当你在场时,请查看底部的面板。在显示Database role membership for:{database name}
的位置时,请务必检查db_datareader
和db_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上,它就可以正常工作。
请尝试一下。