【问题标题】:How to pass user input variable to Sqalchemy statement?如何将用户输入变量传递给 Sqlalchemy 语句?
【发布时间】:2019-02-21 15:30:58
【问题描述】:

我对编程世界还很陌生。我正在使用 Python、Pandas 和 SQLlite;最近我开始构建 Postgresql 数据库。我正在尝试查询 postgres 数据库并使用结果创建 Pandas 数据框。我发现以下工作:

import pandas as pd
from sqlalchemy import create_engine # database connection
engine = create_engine('postgresql://postgres:xxxxx@localhost:xxxx/my_postgres_db')
df = pd.read_sql("SELECT * FROM my_table Where province='Saskatchewan'", engine)

效果很好,但我的问题是如何将用户输入传递给 sql 查询。具体来说,我想做以下事情:

province_name = 'Saskatchewan' #user input
df = pd.read_sql("SELECT * FROM my_table Where province=province_name", engine)

但是,这会返回错误消息: ProgrammingError:(psycopg2.ProgrammingError)列“province_selected”不存在 第 1 行:SELECT * FROM my_table Where Province =province_selec...

任何人都可以就此事提供指导吗?另外,任何人都可以告诉我如何处理postgres数据库中包含'/'等字符的字段名称。我的数据库有一个名为 CD/CSD 的字段(列标题),当我尝试在该字段上运行查询时(类似于上面的代码),我只会收到错误消息。任何帮助将不胜感激。

【问题讨论】:

    标签: python postgresql pandas


    【解决方案1】:

    您应该使用 SQLAlchemy 用来向查询发送参数的 DBAPI 模块提供的功能。使用可能如下所示的 psycopg2:

    province_name = 'Saskatchewan' #user input
    df = pd.read_sql("SELECT * FROM my_table Where province=%s", engine, params=(province_name,))
    

    这比使用 Python 的字符串格式将参数插入到查询中更安全。

    Passing parameters using psycopg2

    pandas.read_sql documentation

    【讨论】:

      猜你喜欢
      • 2015-11-09
      • 2023-03-17
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多