执行某些带有 % 符号的查询时遇到麻烦。
这里是查询,例如,在 Jupyter Notebook、MariaDB、SQL Alchemy 中作为 sa:
query = f'''
SELECT COUNT (DISTINCT id_user),
DATE_FORMAT(time, '%m-%Y') as my
FROM invest_activity
WHERE id_user = 1791237
GROUP BY my
'''
id_user_sample = pd.read_sql(sa.text(query), con = connection_)
所以,如果我使用它,它会产生如下错误:
ProgrammingError: (pymysql.err.ProgrammingError) (1064, "你的 SQL 语法有错误;... 选择计数(不同的 id_user), DATE_FORMAT(time, '%%m-%%Y') 作为我的 ...
尝试使用不同版本的 SQL Alchemy 1.4 和 2.0,也尝试使用 r-srting、sa.text、不同类型的引号、转义符号等,但没有任何效果。也可以在此处查看一些主题,但示例也不起作用。
将不胜感激任何帮助。
您的问题不是百分号。当传递到 DBAPI 层时,它们需要加倍。否则它们会被误解为参数占位符的开头。
您的问题是
COUNT (DISTINCT id_user)
中的空格,它被解释为COUNT
(关键字)而不是COUNT()
(函数)。所以使用COUNT(DISTINCT id_user)
.
这是我的简化解决方案,我想是一种解决方法。
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
connection_ = sa.create_engine(['...some_credentials...'],
dialect = postgresql.dialect(paramstyle = 'named')).connect()
df = pd.read_sql(sa.text(query), con = connection_)