如何使用sqlalchemy pyodbc和MS SQL Server中的多个数据库为pandas read_sql创建sql alchemy连接?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用sqlalchemy pyodbc和MS SQL Server中的多个数据库为pandas read_sql创建sql alchemy连接?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3006字,纯文字阅读大概需要5分钟。
内容图文
![如何使用sqlalchemy pyodbc和MS SQL Server中的多个数据库为pandas read_sql创建sql alchemy连接?](/upload/InfoBanner/zyjiaocheng/909/f28768629ec94215a777aa5ee4e91c5e.jpg)
我正在尝试使用’pandas.read_sql_query’将数据从MS SQL Server复制到pandas DataFrame中.我需要在我的SQL查询中进行多个连接.要连接的表位于同一服务器上,但位于不同的数据库中.我传递给pandas的查询在MS SQL Server Management Studio中运行良好.在Jupyter笔记本中,我试图像这样查询数据(为了使事情可读,查询本身被简化为仅2个连接并使用通用名称):
import pandas as pd
import sqlalchemy as sql
import pyodbc
server = '100.10.10.10'
driver = 'SQL+Server+Native+Client+11.0'
myQuery = '''SELECT first.Field1, second.Field2
FROM db1.schema.Table1 AS first
JOIN db2.schema.Table2 AS second
ON first.Id = second.FirstId
'''
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server, driver))
df = pd.read_sql_query(myQuery, engine)
这不起作用并返回错误:
DBAPIError: (pyodbc.Error) ('IM010', '[IM010] [Microsoft][????????? ????????? ODBC] ??????? ??????? ??? ????????? ?????? (0) (SQLDriverConnect)')
似乎问题出在引擎中,不包含有关数据库的信息,因为一切都可以正常使用下一种代码,我在引擎中包含了数据库:
myQuery = 'select Field1 from schema.Table1'
db = 'db1'
engine = sql.create_engine('mssql+pyodbc://{}/{}?driver={}'.format(server, db, driver))
df = pd.read_sql_query(myQuery, engine)
但如果我不在引擎中包含数据库,则会像上面的联接代码一样中断,但是将其添加到查询中,如下所示:
myQuery = 'select Field1 from db1.schema.Table1'
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server,
driver))
df = pd.read_sql_query(myQuery, engine)
那么我应该如何指定pandas.read_sql_query的’sql’和’con’参数
这种情况下,我需要连接来自不同数据库但同一服务器的表?
附:我只有对我连接的服务器的读访问权限.我无法创建新的表或视图或类似的东西.
更新:
MS SQL Server版本是2008 R2.
更新2:我使用的是Python 3.6和Windows 10.
解决方法:
所以我找到了一个解决方法:使用pymssql而不是pyodbc(在import语句和引擎中).它允许您使用数据库名称构建连接,而无需在引擎中指定它们.在这种情况下,无需指定驱动程序.
如果你使用的是python不支持的Python 3.6可能会有问题,但是你可以找到Python 3.6 here的非官方轮子.它可以用于我的查询.
这是带有连接的原始代码,重建后可以使用pymssql:
import pandas as pd
import sqlalchemy as sql
import pymssql
server = '100.10.10.10'
myQuery = '''SELECT first.Field1, second.Field2
FROM db1.schema.Table1 AS first
JOIN db2.schema.Table2 AS second
ON first.Id = second.FirstId'''
engine = sql.create_engine('mssql+pymssql://{}'.format(server))
df = pd.read_sql_query(myQuery, engine)
至于非官方的轮子,你需要从我上面给出的链接下载Python 3.6的文件,然后cd到下载文件夹并运行pip install wheels,其中’wheels’是轮文件的名称.
更新:
实际上,也可以使用pyodbc.我不确定这是否适用于任何SQL Server设置,但在我将’master’设置为引擎中的数据库后,一切都适用于我.生成的代码如下所示:
import pandas as pd
import sqlalchemy as sql
import pyodbc
server = '100.10.10.10'
driver = 'SQL+Server'
db = 'master'
myQuery = '''SELECT first.Field1, second.Field2
FROM db1.schema.Table1 AS first
JOIN db2.schema.Table2 AS second
ON first.Id = second.FirstId'''
engine = sql.create_engine('mssql+pyodbc://{}/{}?driver={}'.format(server, db, driver))
df = pd.read_sql_query(myQuery, engine)
内容总结
以上是互联网集市为您收集整理的如何使用sqlalchemy pyodbc和MS SQL Server中的多个数据库为pandas read_sql创建sql alchemy连接?全部内容,希望文章能够帮你解决如何使用sqlalchemy pyodbc和MS SQL Server中的多个数据库为pandas read_sql创建sql alchemy连接?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。