【问题标题】:pyodbc connection string sql server authenticationpyodbc 连接字符串 sql server 身份验证
【发布时间】:2014-02-28 23:25:56
【问题描述】:

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

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

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

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 并从那里登录到数据库来仔细检查用户名和密码,并且它是成功的。

【问题讨论】:

  • 你试过了吗 User Id=myUsername;密码=我的密码; ?
  • @YevgenYampolskiy 将属性更改为用户 ID 和密码不起作用。收到无效属性的错误
  • 您是否尝试使用 Windows 服务进行连接?
  • @þăדᴚῖↄқ 我已经解决了谢谢
  • 想分享您的解决方案吗?我在尝试解决类似问题时遇到了这个问题。

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


【解决方案1】:

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

为此:

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

当您使用它时,请查看底部的面板。在上面写着Database role membership for:{database name} 的地方,请确保您选中了db_datareaderdb_datawriter

【讨论】:

  • “登录”是什么意思?我在 SSMS 中,已连接到我的服务器,但我看不到要登录的位置?
【解决方案2】:

这是一种使用 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

【讨论】:

    【解决方案3】:

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

    我将数据库名称放在括号之间,例如 [DB_NAME],但是一旦我将括号删除到 DB_NAME,它就可以正常工作了。

    请试一试。

    【讨论】:

      【解决方案4】:

      在 obdc 数据源中配置 MSSQL 服务器,并为 pyodbc 连接命名,如下所示。我的 userdsn 名称是 MyConnection

      import pyodbc
      
      cnxn = pyodbc.connect('DSN=MyConnection')
      cursor = cnxn.cursor()
      cursor.execute("SELECT TOP (1000) [DepartmentID]      ,[Name]      ,[GroupName]      ,[ModifiedDate]  FROM ["
                     "AdventureWorks2019].[HumanResources].[Department]")
      rows = cursor.fetchall()
      for row in rows:
          print(row.DepartmentID, row.Name)
      

      它对我有用。让我知道是否有其他方法可以做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多