【发布时间】:2019-12-17 02:23:21
【问题描述】:
我认为满足语法要求并且已经尝试了很多......
我已经设置了后续变量:
db_uri = "postgres://{}:{}@{}/{}".format(user, pwd, server, db)
engine = create_engine(db_uri)
con = engine.connect()
已经有效的方法:
df_sql = pd.read_sql_table('TABLE', engine)
什么也有效:
query = 'SELECT * FROM "TABLE" WHERE id_column = 12564993'
df = pd.read_sql_query(query, con)
但是当我将 id_column 更改为 date_column 时,就没有任何效果了:
query = 'SELECT * FROM "TABLE" WHERE CAST(ts_column as date) = ts_column "2019-06-19"'
df = pd.read_sql_query(query, con)
独立于所有可用的语法选项,我得到一个错误代码:
ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near ""2019-06-19""
LINE 1: ...LECT * FROM "TABLE" WHERE CAST(ts_column as date) = ts_column "2019-06-1...
“2019-06.1”的“下方有一个 ^...知道要修复什么吗?我查阅了文档并搜索了任何类型的条件 where 语句主题,但我仍然不明白。为什么我不能只选择特定的日期属性来获取匹配的行?
【问题讨论】:
-
双引号用于带引号的标识符,而不是文字。使用单引号。另外,为什么要在文字前面加上列名 (ts_column)?
-
由于我将该 SQL 语句保存在一个变量中,因此我必须在开头和结尾都使用 '。当我在两者之间使用 ' 时,它会破坏我的陈述。我的表名也是大写的。如果要在 select 语句中使用大写的表,则必须使用 " 而不是 none 或 '。
-
请先声明您的 Postgres 版本和您的实际表定义(
CREATE TABLE声明)。 -
要么转义 SQL 语句中 Python 字符串文字中的单引号,要么使用三引号(在 Python 中)。
-
@Christian:你可以通过
\d "TABLE"获取psql中的相关信息。 (而且不要使用“TABLE”作为表名。永远。stackoverflow.com/a/20880247/939860)
标签: python sql pandas postgresql sqlalchemy