SQLAlchemy 在 Jupyter Notebook 中将百分号加倍

问题描述 投票:0回答:2

执行某些带有 % 符号的查询时遇到麻烦。

这里是查询,例如,在 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、不同类型的引号、转义符号等,但没有任何效果。也可以在此处查看一些主题,但示例也不起作用。

将不胜感激任何帮助。

pandas sqlalchemy mariadb
2个回答
0
投票

您的问题不是百分号。当传递到 DBAPI 层时,它们需要加倍。否则它们会被误解为参数占位符的开头。

您的问题是

COUNT (DISTINCT id_user)
中的空格,它被解释为
COUNT
(关键字)而不是
COUNT()
(函数)。所以使用
COUNT(DISTINCT id_user)
.


0
投票

这是我的简化解决方案,我想是一种解决方法。

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_)
© www.soinside.com 2019 - 2024. All rights reserved.