我在尝试使用psycopg2
代替create_engine
执行以下代码片段时遇到了一个问题。
# Code snippet using create_engine (works fine):
from sqlalchemy import create_engine
import pandas as pd
db_url = "your_database_url_here"
engine = create_engine(db_url)
# Establish a connection
connection = engine.connect()
sql_query = "your_table_name"
df = pd.read_sql(sql_query, con=connection)
字符串
如果数据库中存在your_table_name
表,则成功返回DataFrame
。
当我使用psycopg2
复制完全相同的代码时,它会抛出一个错误。下面是修改后的代码:
# Code snippet using psycopg2 (throws error):
import psycopg2
import pandas as pd
db_url = "your_database_url_here"
conn = psycopg2.connect(db_url)
cursor = conn.cursor()
sql_query = "your_table_name"
# The following line throws an error
df = pd.read_sql(sql_query, con=conn)
型
我已经验证了该表存在于数据库中。关于可能导致此问题的原因,有什么想法吗?
在提供的代码片段中,我使用SQLAlchemy
和create_engine
建立连接,并使用pd.read_sql
检索DataFrame
。在查询名为your_table_name
的表时,这成功地工作了。
但是,当尝试使用psycopg2
复制相同的功能时,在执行pd.read_sql
期间发生错误:
Execution failed on sql 'transaction': syntax error at or near "your_table_name"
LINE 1: your_table_name
^
型
2条答案
按热度按时间7gcisfzg1#
根据documentation:
sql:str or SQLAlchemy Selectable(select or text object)
要执行的SQL查询或表名。
con:*SQLAlchemy可连接、str或sqlite3连接 *
使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI 2对象,则只支持sqlite3。用户负责引擎处理和SQLAlchemy可连接的连接关闭; str连接会自动关闭。请参阅此处。
因此,如果您不使用
SQLAlchemy
,即使psycopg2
符合DBAPI 2.0规范,也应该只使用sqlite
连接,否则您将收到UserWarning
:字符串
然而,这并不是你的代码引发错误的原因。实际上,当使用
SQLAlchemy
时,你只能传递一个表名,否则你必须传递一个SQL查询。型
我的建议:要么你使用SQLAlchemy和Pandas,要么你使用connectorx来加载你的数据(只读!):
型
jxct1oxe2#
如果你想走这条路:
字符串