我试图在python中编写一个通用的数据库连接器类.为此,我想首先检查机器上安装的驱动程序,如果机器中缺少所需的驱动程序,则抛出错误.
有没有办法在python中执行此操作?
这有效:
db = pyodbc.connect('driver={SQL Server Native Client 11.0}; server=172.30.0.194; database=db;uid=someuser; pwd=fancy@password')
Run Code Online (Sandbox Code Playgroud)
这不
cn_string = "mssql+pyodbc://someuser:"fancy&password"@172.30.0.194/db?driver=SQL+Server+Native+Client+11.0"
return create_engine(cn_string)
Run Code Online (Sandbox Code Playgroud)
这也不:
driver = "SQL Server Native Client 11.0"
server = "192.30.0.194"
database = "EPM_Dashboard"
uid = "someuser"
pwd = "fancy@password"
params = f'DRIVER={{{driver}}};SERVER={server};DATABASE={database};UID={uid};PWD={{{pwd}}};'
connection_string = 'mssql+pyodbc:///?odbc_connect=%s' % urllib.parse.quote_plus(params)
return create_engine(connection_string)
Run Code Online (Sandbox Code Playgroud)
我得到类似的东西:
登录超时已过期(0);[08001] [Microsoft][SQL Server Native Client 11.0]与 SQL Server 建立连接时发生网络相关或实例特定的错误。找不到服务器或无法访问服务器。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。(53)
如果 pyodbc 项目失败,这会更可信。
这是另一个失败:
return create_engine(urllib.parse.quote_plus('driver={SQL Server Native Client 11.0}; server=172.30.0.194; database=EPM_Dashboard;uid=someuser; pwd=fancy@password'))
Run Code Online (Sandbox Code Playgroud)
我确信我在某个地方缺少了一个棘手的角色。
这是一些资源
https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-databases
我正在尝试将 pyodbc 连接切换到 sqlalchemy。工作的 pyodbc 连接是:
import pyodbc
con = 'DRIVER={ODBC Driver 11 for SQL Server};SERVER=server.com\pro;DATABASE=DBase;Trusted_Connection=yes'
cnxn = pyodbc.connect(con)
cursor = cnxn.cursor()
query = "Select * from table"
cursor.execute(query)
Run Code Online (Sandbox Code Playgroud)
我试过:
from sqlalchemy import create_engine
dns = 'mssql+pyodbc://server.com\pro/DBase?driver=SQL+Server'
engine = create_engine(dns)
engine.execute('Select * from table').fetchall()
Run Code Online (Sandbox Code Playgroud)
基于: http: //docs.sqlalchemy.org/en/latest/core/engines.html
并且:使用 SQLAlchemy 时 pandas.read_sql() 比 pyodbc 慢得多
(尝试使用 Trusted_Connection = Yes 建立连接)
但我收到消息:
操作错误:(pyodbc.OperationalError) ('08001','[08001] [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]不存在 SQL Server 服务,无法访问。 (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).(53)') (此错误的背景位于: http: …
我正在尝试使用 pandas.read_sql_table 从 MS SQL Server 获取数据(服务器在网络上)。我使用 Windows 身份验证来访问服务器。Pandas read_sql_table 将 SQL Alchemy 连接作为“连接”的参数。我很难找到一个结合了以下内容的示例:
我咨询了 SQL Alchemy,它显示了一个使用 SQL 身份验证的示例,但没有使用 Windows 身份验证。http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#connecting-to-pyodbc 以下是我尝试过的各种选项。都返回错误。
import pandas as pd
from sqlalchemy import create_engine
import pyodbc
# set some variables
dbname = 'mydbname'
schemaname = 'myschemaname'
servername = 'myservername'
tablename = ‘mytablename’
sqlcon = create_engine('mssql+pyodbc://@' + servername)
#sqlcon = create_engine('mssql+pyodbc://' + servername + '/' + dbname)
#sqlcon = create_engine('mssql+pyodbc://' + servername)
#sqlcon …Run Code Online (Sandbox Code Playgroud)