繁体   English   中英

如何将sql表保存为pandas数据框?

[英]How to save sql table as pandas dataframe?

我一直在尝试使用 cx_oracle 提取 sql 表并使用以下脚本将其保存为 Pandas 数据框:

import  cx_Oracle
import pandas as pd

id = 1234
connection = cx_Oracle.connect(user="user", password='pwd',dsn="dsn")
# Obtain a cursor
cursor = connection.cursor()
# Execute the query
query = """select * from table where id= {id}"""
my_sql =cursor.execute(query.format(id=id))
df_sql = pd.read_sql(my_sql, connection)

我能够连接到数据库,但无法将其保存为 Pandas 数据框。 我怎么做? 我收到以下错误:

  File "file/to/path.py", line 38, in file
    df_sql = pd.read_sql(my_sql, connection)
  File "C:\file/to/path\venv\lib\site-packages\pandas\io\sql.py", line 495, in read_sql
    return pandas_sql.read_query(
  File "File/to/path\venv\lib\site-packages\pandas\io\sql.py", line 1771, in read_query
    cursor = self.execute(*args)
  File "File/to/path\venv\lib\site-packages\pandas\io\sql.py", line 1737, in execute
    raise ex from exc
pandas.io.sql.DatabaseError: Execution failed on sql '<cx_Oracle.Cursor on <cx_Oracle.Connection to dsn>>': expecting string or bytes object

pd.read_sql的第一个参数应该是查询(如果我没记错的话)。 您正在解析cursor对象。 尝试用query ie 替换my_sql中的pd.read_sql

pd.read_sql(query.format(id=id))

或使用游标对象即

df = pd.DataFrame(my_sql.fetchall())

注意, fetchall()只返回数据,即不返回头,可以使用cursor.description获得(请参阅此处的 SO 答案)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM