Mysql read_sql python查询带有变量@

肯尼

我知道可以使用?%s此处此处的执行查询中对Python中的查询进行参数化

但是我有一些长查询,它将使用在查询开始时定义的一些常量变量

Set @my_const = 'xyz';
select @my_const;
-- Query that use @my_const 40 times
select ... coalesce(field1, @my_const), case(.. then @my_const)...

我想对MySQL的查询做最少的修改。因此,与其将查询修改为

pd.read_sql(select ... coalesce(field1, %s), case(.. then %s)... , [my_const, my_const, my_const, ..]

,我可以按照初始查询的内容写一些东西。经过尝试以下,但是,我得到一个TypeError: 'NoneType' object is not iterable

query_str = "Set @null_val = \'\'; "\
    " select @null_val"
erpur_df = pd.read_sql(query_str, con = db)

任何想法如何使用Mysql查询中定义的原始变量?

皮平古

原因

query_str = "Set @null_val = \'\'; "\
    " select @null_val"
erpur_df = pd.read_sql(query_str, con = db)

抛出该异常是因为 您所做的只是将null_value设置为'',然后选择该选项 '' -您期望给您什么? EDIT read_sql似乎只一次执行一个查询,并且由于第一个查询不返回任何行,因此会导致该异常。如果将它们分成对read_sql的两个调用,则实际上它将返回您@null value在第二个调用中的值由于这种行为read_sql,显然不是执行此操作的好方法。我强烈建议您使用以下我的建议之一。

无论如何,为什么要在SQL中使用“ @”设置变量?

您可以尝试使用.format字符串格式样式。

像这样:

query_str = "select ... coalesce(field1, {c}), case(.. then {c})...".format(c=my_const)
pd.read_sql(query_str)

只要记住,如果您以这种方式进行操作并且您my_const是用户输入,那么您将需要手动对其进行清理以防止SQL注入。

另一种可能性是使用类似这样的参数字典:

query_str = "select ... coalesce(field1, %(my_const)s, case(.. then %(my_const)s)..."
pd.read_sql(query_str, params={'my_const': const_value})

但是,这取决于您使用哪个数据库驱动程序。

pandas.read_sql docs

检查您的数据库驱动程序文档,以支持PEP 249的paramstyle中描述的五种语法样式中的哪一种。例如。对于psycopg2,使用%(name)s,因此请使用params = {'name':'value'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从 MYSQL 查询时出现 dask read_sql 错误

带有参数的熊猫read_sql

带有多个选择的熊猫read_sql查询

熊猫read_sql。如何查询日期字段的where子句

Python Pandas read_sql - 调用先前指定的日期

Pandas read_sql Postgres查询的具有挑战性的语法

如何在python read_sql语句中合并python变量

带有%的Python Mysql变量

有什么办法可以在熊猫read_sql函数中设置超时时间?

熊猫read_sql()-AttributeError:“ Engine”对象没有属性“ cursor”

(烧瓶)python-mysql-在带有URL变量的select查询中使用where子句

带有变量的复杂sql查询

带有SQL中变量的Wordpress查询

带有变量的 INSERT SELECT SQL 查询

使用index_col时,熊猫的read_sql列不起作用-而是返回所有列

大熊猫有没有办法将 read_sql() 与 sql 语句一起使用,它需要多个变量?

Ruby + MySQL2查询失败,并带有变量

用于插入的 PHP MySQL 查询,带有连接赋值变量

带有增量变量的节点 Mysql 查询

带有字符串变量的mysql查询

熊猫“ read_sql” UnicodeDecodeError

带有 Python 条件的 Pyathena SQL 查询

带有查询的MySQL函数

执行一个mysql select查询,该查询在php中具有sql变量

在带有多个变量的for循环中添加sql查询

带有 mysql 查询插入的 Python - 单参数

使用带有变量值的 mysql python 创建表

带有变量的 Python MySQL 更新语句

错误MySql您的SQL语法有错误。当添加带有变量的参数时