【发布时间】:2020-04-03 22:13:15
【问题描述】:
我想在我的数据库中读取一个表作为 pandas 数据框。我正在使用sqlalchemy,在我看来它只执行大写查询。
我的架构中的表 XYZ 有一个小写的列名“pred_pred”。当我执行以下操作时:
import pandas as pd
import cx_Oracle as ora
from sqlalchemy import create_engine
from sqlalchemy.engine import url
connect_url = url.URL(...)
engine = create_engine(connect_url)
connection = engine.connect()
input = pd.read_sql_query('SELECT pred_pred FROM XYZ', connection)
我收到以下错误:
DatabaseError: ORA-00904: "PRED_PRED": invalid identifier
有解决办法吗?
编辑:目前,作为一种解决方法,我只是使用* 导入所有列,然后在pandas 中处理它们,因为该表只有少数列。我仍然想知道是否有可能以更直接的方式解决这个问题。
【问题讨论】:
-
不带引号的标识符在 SQL 中是不区分大小写的,如果我没记错的话,Oracle 会将不带引号的标识符转换为大写(例如 Postgres 正好相反)。如果您的列是小写的,也许您必须使用带引号的标识符:
"pred_pred", -
感谢您的回复。您的意思是使用
query = 'SELECT '+"pred_pred"+' FROM XYZ'吗?我收到相同的错误消息。 -
不,他的意思是直接
query = 'SELECT "pred_pred" FROM XYZ'。顺便说一句,永远不要使用这样的字符串连接,因为容易注入。 -
@BarbarosÖzhan 听到 :D:D
-
@BarbarosÖzhan 凡事都有时间,而且 她 长大了很多,所以我想应该拍一张新照片 :D
标签: python sql pandas oracle sqlalchemy