我想用一个python程序连接到不同的数据库(现在是MSSQL和Oracle,以后也可能是postgres/mysql),理想情况下将查询/表读入pandas Dataframe 。出于兼容性的原因,我使用的是python3.7。到数据库的连接只能通过DSN(从文件中读取/配置,但这不是问题)。
问题是sqlalchemy(1.4)不支持使用DSN连接到Oracle数据库(除非我在互联网上没有找到任何答案),所以我尝试直接与cx_oracle连接(这很好),但我不能使用pandas.read_sql_table(),所以我更希望有另一种解决方案,以某种方式仍然使用DSN连接到Oracle DB。对于MSSQL,使用pyodbc作为方言,sqlalchemy连接工作正常。示例代码:
import pandas as pd
import sqlalchemy as sqla
loginuser = 'username'
loginpwd = 'password'
logindsn = 'dsnname'
dbtype = 'oracle'/'MSSQL' #this is read from a file along with the other variables, just put it here directly to not make the code overly complicated
if dbtype == 'oracle':
conn = ora.connect(user=loginuser, password=loginpwd, dsn=logindsn) #using a dsn doesnt work with sqlalchemy afaik
elif dbtype == 'MSSQL':
engine = sqla.create_engine('mssql+pyodbc://'+loginuser+':'+loginpwd+'@'+logindsn)
conn = engine.connect()
testdf = pd.read_sql_table('Employees', conn) # for MSSQL this works, for oracle it gives an error that pd.read_sql_table (which id like to use) can only be used with a sqlalchemy-connection
字符串
如果有比pandas+sqlalchemy更好的解决方案,我愿意换一个不同的库,让我可以轻松地连接到Oracle和MSSQL。
2条答案
按热度按时间gtlvzcf81#
注意:Python-oracledb是Oracle最新版本的流行cx_Oracle驱动程序的新名称,默认情况下以“精简”模式运行,绕过Oracle客户端库。
klsxnrf12#
我尝试直接连接cx_oracle(运行正常),但无法使用pandas.read_sql_table()
需要说明的是,在SQLAlchemy 1.4和pandas 1.5.3中,
.read_sql_table()
可以很好地用于oracle+cx_oracle://
:字符串