从你的pyodbc连接字符串或已知的连接参数创建SqlAlchemy连接URL
我发现其他答案都很有教育意义,我也发现了关于连接字符串的 SqlAlchemy文档,但我一直无法连接到MS SQL Server Express 19,因为我没有使用用户名或密码,而是使用trusted_connection ='yes'(目前只是在开发阶段)。
然后我在这篇SqlAlchemy文档中找到了通过pyodbc连接字符串(或仅连接字符串)构建连接URL的方法,这也可以通过已知的连接参数构建连接URL(即可以将其简单地视为不一定在pyodbc中使用的连接字符串)。由于我知道我的pyodbc连接字符串正在工作,所以这似乎会对我有用,而且确实如此!
这种方法消除了创建传递给SqlAlchemy create_engine方法的正确格式的猜测。如果您知道连接参数,请按照文档中的示例代码将其放入一个简单的字符串中,sqlalchemy.engine模块中的URL类的create方法会为您执行正确的格式化。
下面的示例代码如此运行,并假定具有以下模式的名为master的数据库和现有表table_one。此外,我正在使用pandas导入我的表数据。否则,我们将想要使用上下文管理器来管理连接到数据库并关闭连接,就像这里在SqlAlchemy文档中一样。
import pandas as pd
import sqlalchemy
from sqlalchemy.engine import URL
table_one = {'name': 'table_one',
'columns': ['ident int IDENTITY(1,1) PRIMARY KEY',
'value_1 int NOT NULL',
'value_2 int NOT NULL']}
driver='{SQL Server}'
server='localhost\SQLEXPRESS'
database='master'
trusted_connection='yes'
connection_string = f'DRIVER={driver};SERVER={server};'
connection_string += f'DATABASE={database};'
connection_string += f'TRUSTED_CONNECTION={trusted_connection}'
connection_url = URL.create(
"mssql+pyodbc", query={"odbc_connect": connection_string})
""" more code not shown that uses pyodbc without sqlalchemy """
engine = sqlalchemy.create_engine(connection_url)
d = {'value_1': [1, 2], 'value_2': [3, 4]}
df = pd.DataFrame(data=d)
df.to_sql('table_one', engine, if_exists="append", index=False)
更新
假设您已经在Linux机器上安装了SQL Server Express。您可以使用以下命令确保以下内容的正确字符串:
- 对于驱动程序:
odbcinst -q -d
- 对于服务器:
sqlcmd -S localhost -U <用户名> -P <密码> -Q 'select @@SERVERNAME'
sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?trusted_connection=yes&driver=ODBC+Driver+13+for+SQL+Server')
- DoloMike