我有这个简单的连接问题:
有人在我的计算机上安装了正确的ODBC驱动程序,到目前为止,我可以使用以下代码连接到我的数据库
import pyodbc
import pandas as pd
import numpy as np
cnxn = pyodbc.connect('DSN=MYDSN')
cnxn.timeout = 3600
cursor = cnxn.cursor()
但是,出于多种原因,我想使用SQLAlchemy
并使用天真的
import sqlalchemy
engine = sqlalchemy.create_engine('DSN=MYDSN')
悲惨地失败了。
ArgumentError:无法解析字符串'DSN = MYDSN'中的rfc1738网址
我在这里找不到正确的语法。我也不知道我的数据库的URL。我在这里失去了希望吗?
谢谢!
答案 0 :(得分:2)
使用“原始”pyodbc连接来了解DSN可能会与之交谈的内容......
>>> cnxn = pyodbc.connect('DSN=MYDSN')
>>> cnxn.getinfo(pyodbc.SQL_DRIVER_NAME)
'Cisco Information Server 7.0.3 ODBC Driver'
对于该产品,似乎不太可能存在特定的SQLAlchemy方言。进一步测试显示两者都
engine = sqlalchemy.create_engine('mssql+pyodbc://MYDSN')
和
engine = sqlalchemy.create_engine('mysql+pyodbc://MYDSN')
可以连接,但尝试使用SQLAlchemy功能,如
print(engine.table_names())
失败,因为CIS不会“说”本机T-SQL或MySQL。
您仍然可以使用某些 SQLAlchemy功能,例如,用于运行基本查询(依赖于相当简单的SQL语法)。对于不起作用的SQLAlchemy功能,您可以回退到本机pyodbc。例如,而不是
print(engine.table_names())
你可以使用
cnxn = engine.connect()
crsr = cnxn.cursor()
table_names = [x.table_name for x in crsr.tables(tableType='TABLE')]
print(table_names)