如何在我的 SQL 服务器和 python 脚本之间建立连接?

问题描述 投票:0回答:1

我正在尝试将我的 Azure 数据库连接到我的 Jupyter Notebook Python 脚本,但我不断收到一条错误消息,提示无法建立连接。

这是我的代码:

# Create the SQLAlchemy engine
connection_string = "Driver=/usr/local/lib/libmsodbcsql.18.dylib;Server=tcp:XXX.database.windows.net,1433;Database=XXX;Uid=XXX;Pwd={XXX};Encrypt=yes;TrustServerCertificate=yes;Connection Timeout=30;ssl_version=TLSv1.2"

engine = sqlalchemy.create_engine(f"mssql+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}")

这是我收到的错误:

Error: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC Driver 18 for SQL Server]Client unable to establish a connection (0) (SQLDriverConnect)')
(Background on this error at: http://sqlalche.me/e/14/e3q8)

我使用的是 Mac。我不知道这是否是我的数据库设置的错误,但我尝试弄乱设置并不断收到相同的错误。

python sqlalchemy azure-sql-database driver pyodbc
1个回答
0
投票

错误:(pyodbc.OperationalError) (‘08001’,‘[08001] [Microsoft][ODBC Driver 18 for SQL Server]客户端无法建立连接 (0) (SQLDriverConnect)’)

SERVER
中的
Connection String
不正确时,就会出现上述错误。我使用正确的凭据在我的计算机上尝试,它连接成功,如下面的代码所示:

import urllib
import sqlalchemy

connection_string = (
    "DRIVER={ODBC Driver 18 for SQL Server};"
    "SERVER=tcp:*****.database.windows.net,1433;"
    "DATABASE=sampleDB;"
    "UID=admin6391;"
    "PWD=******;"
    "Encrypt=yes;"
    "TrustServerCertificate=no;"
    "Connection Timeout=30;"
)

engine = sqlalchemy.create_engine(f"mssql+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}")

connection = engine.connect()

try:
    print("Connection successful!")

    table_name = 'sampleTable'
    select_query = sqlalchemy.sql.text(f"SELECT * FROM {table_name}")
    result = connection.execute(select_query)

    rows = result.fetchall()
    for row in rows:
        print(row)

except Exception as e:
    print(f"Error: {e}")

finally:
    if connection:
        connection.close()

输出:

Connection successful!
(1, 'Pavan', 'Balaji', Decimal('31000.0000'), 'Hyderabad')
(2, 'Sai', 'Venkatesh', Decimal('35000.0000'), 'Visakhapatnam')

© www.soinside.com 2019 - 2024. All rights reserved.