python - 从 Python 创建动态 SQL 查询

标签 python postgresql list psycopg2

我正在使用下面的一组参数来创建动态 sql 查询并从 python 运行它。

target_column = 'connect_status'
table_name = 'public.main_table'

query_params = {'month_date' : '201801',
                'churn_date' : ['201802','201803','201804'],
                'disco_target' : '1-3 Month Disco'
                }


for churn in query_params['churn_date']:
    sql_data_sample = str("""select * from {1}
                                where dt = %(month_date)s 
                                and churn_date = %(churn)s
                                and {0} IN (%(disco_target)s,'No Disco') order by random() limit 5000
                                ;""").format(target_column,table_name)
    print (sql_data_sample)


    df_data_sample = pd.read_sql(sql_data_sample,con = cnxn,params = query_params)

但是这会产生数据库错误:

Execution failed on sql 'select * from public.main_table
                                where dt = %(month_date)s 
                                and churn_date = %(churn)s
                                and connect_status IN (%(disco_target)s,'No Disco') order by random() limit 5000
                                ;': 'churn'

有人可以帮我改正吗?

最佳答案

问题是因为 churnquery_params 中不可用。将您的代码修改为

for churn in query_params['churn_date']:
    try:
       sql_data_sample = str("""select * from {1}
                            where dt = %(month_date)s 
                            and churn_date = %(churn)s
                            and {0} IN (%(disco_target)s,'No Disco') order by random() limit 5000
                            ;""").format(target_column,table_name)
        print (sql_data_sample)

        query_params['churn'] = churn
        df_data_sample = pd.read_sql(sql_data_sample,con = cnxn,params = query_params)
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)

关于python - 从 Python 创建动态 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256723/

相关文章:

postgresql - 将 hstore 分解为行内的新列

java - HashMap 中每个键的值相同

Python如何键入注释返回self的方法?

python:打印短utf编码字符串时遇到问题

python - 跨线程共享 Django 事务

python - 如何使用 Google Appengine 在 url 中使用 ';'(分号)

json - 将数据从 Postgres 导出到 json 并重命名 fly 的列

linux - 用于 Windows 的 Postgres-XL

java - 2个系列之间的区别? (collection1 中的元素,但不在 collection2 中)

python - 如何从 n 元组中每个元素相同的列表中删除 n 元组?