python - 使用 odbc_connect 从 SQLAlchemy 连接到 SQL 服务器

标签 python sql-server pandas sqlalchemy pyodbc

我是 Python 和 SQL 服务器的新手。在过去的 2 天里,我一直在尝试将 pandas df 插入到我们的数据库中,但没有任何运气。谁能帮我调试错误。

我试过以下方法

import pyodbc
from sqlalchemy import create_engine

engine = create_engine('mssql+pyodbc:///?odbc_connect=DRIVER={SQL Server};SERVER=bidept;DATABASE=BIDB;UID=sdcc\neils;PWD=neil!pass')
engine.connect()
df.to_sql(name='[BIDB].[dbo].[Test]',con=engine, if_exists='append')

但是在 engine.connect() 行我收到以下错误

sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver]Neither DSN nor SERVER keyword supplied (0) (SQLDriverConnect)')

谁能告诉我我错过了什么。我正在使用 Microsoft SQL Server Management Studio - 14.0.17177.0

我通过以下连接到SQL服务器

Server type: Database Engine
Server name: bidept
Authentication: Windows Authentication

for which I log into my windows using username : sdcc\neils
and password : neil!pass

这个我也试过

import pyodbc

conn_str = (
    r'Driver={SQL Server Native Client 11.0};'
    r'Server=bidept;'
    r'Database=BIDB;'
    r'Trusted_Connection=yes;'
    )

cnxn = pyodbc.connect(conn_str)

df.to_sql(name='Test',con=cnxn, if_exists='append')

我得到这个错误

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement(s) could not be prepared. (8180)")

任何帮助将不胜感激,因为我不知道该怎么做。

最佳答案

SQLAlchemy documentation 中所述,使用传递的精确 pyodbc 字符串时,“分隔符必须经过 URL 转义”。

所以,这将失败......

import pyodbc
from sqlalchemy import create_engine

params = r'DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb;Trusted_Connection=yes'
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str)

...但这会起作用:

import pyodbc
from sqlalchemy import create_engine
import urllib

params = urllib.parse.quote_plus(r'DRIVER={SQL Server};SERVER=.\SQLEXPRESS;DATABASE=myDb;Trusted_Connection=yes')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str)

关于python - 使用 odbc_connect 从 SQLAlchemy 连接到 SQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416699/

相关文章:

python - 如何迭代 numpy 矩阵和填充值?

python - 在 Tensorflow 中使用两个不同的 LSTM 单元

python - 无法安装 google-colab 包

pandas - 机器学习中的缩放 ID 列?

python - 如何使用 PYMC 编写多元正态的分层混合模型

python - 系统+ Homebrew Python与LLDB的奇怪混合

sql-server - 区域日期格式和数据库日期格式的不同日期格式的 SQL Server 错误

sql-server - SQL Server 2008 - 特定数据库的每秒事务数

c# - Linq 到 SQL : SELECT latest DISTINCT entries

python - 访问 Pandas 数据框中的数据