【问题标题】:pyodbc always connects to master databasepyodbc 始终连接到主数据库
【发布时间】:2018-03-13 15:21:03
【问题描述】:

我正在使用 pyodbc 连接到 azure sql 数据库。我的源代码如下所示:

import pyodbc

server = 'sqlserver.database.windows.net'
database = 'database'
username = 'username'
password = 'password'

conn= pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server}'+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password ';Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;')
cursor = conn.cursor()
cursor.execute("query")

我能够连接到 sql 数据库。唯一不能正常工作的是 pyodbc 没有连接到我在 database 变量中指定的数据库。它始终连接到主数据库。

到目前为止,我尝试的是在连接到主数据库时使用SELECT * FROM sys.databases 打印目标 sql 服务器上的数据库名称。我能够看到我正在尝试连接的数据库。有人知道我的源代码出了什么问题吗?

【问题讨论】:

    标签: python sql-server odbc azure-sql-database pyodbc


    【解决方案1】:

    一般来说,我会假设连接字符串在您的情况下需要有所不同。 根据 pyodbc 文档:

    [...]要记住的最重要的事情是 pyodbc 甚至不查看连接字符串。它直接传递给未经修改的数据库驱动程序(通过 SQLDriverConnect)。因此,连接字符串是特定于驱动程序的,所有 ODBC 连接字符串文档都应该是有效的。

    https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-databases

    但是,由于您正在连接到 db OK 并且您的连接字符串似乎被忽略了,我想说如果您使用的是 Windows,那么连接参数似乎可能在 ODBC DSN 中定义,可以在控制面板中更改。如果是这种情况,并且您在 DSN 中定义了 ODBC 参数,则很可能您的连接字符串被忽略,除了 DSN 的选择。

    【讨论】:

    • 感谢您的链接。非常有用的信息。我尝试使用 DSN 条目进行连接,一切正常。仍然想知道为什么连接字符串不起作用。我在第一次尝试中使用的连接字符串依赖于 azure 门户中建议的连接字符串。但是,第一次尝试中的错误消息(例如找不到表)显然是由驱动程序生成的,而不是由符合您答案的 pyodbc 生成的。
    • @0x51ba 我认为连接字符串有点偏离了整个 ODBC 的想法。 DSN 的概念是核心 odbc:en.m.wikipedia.org/wiki/Open_Database_Connectivity 从技术上讲,只要系统上存在正确命名的 ODBC DSN,您应该能够迁移到另一个 SQL 服务器品牌,而您的程序甚至不会注意到。
    • @epattaro 据我从 ODBC 文档了解,传递给 ODBC 的参数不会被忽略如果相应的 ODBC 源没有它。因此,如果您想将 uid 和 pwd 传递给 ODBC,则必须定义一个 ODBC 源,其中 not 设置了 uid 和 pwd。不过还没有测试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多