使用Python和psycopg2,我试图构建一个动态SQL查询来将行插入到表中。
变量有:1。表名2。列名的变量列表3。可变值列表,理想情况下在一条语句中输入多行
我遇到的问题是如何处理从Python到SQL的字符串文字,以及psycopg2如何避免代码受到SQL注入攻击。
使用SQL模块,我已经解决了动态添加表名和列列表的问题。然而,我真的很难添加VALUES。首先,值以%(val)s的形式放入查询,似乎像这样传递给数据库,导致错误。
其次,我希望能够一次添加多行。
代码如下。非常感谢所有帮助:)
import psycopg2 as pg2
from psycopg2 import sql
conn = pg2.connect(database='my_dbo',user='***',password='***')
cols = ['Col1','Col2','Col3']
vals = ['val1','val2','val3']
#Build query
q2 = sql.SQL("insert into my_table ({}) values ({})") \
.format(sql.SQL(',').join(map(sql.Identifier, cols)), \
sql.SQL(',').join(map(sql.Placeholder,vals)))
当我将此字符串打印为print(q2.as_string(conn))时,我得到:
插入到my_table(“Col1”、“Col2”、“Col3”)值%(val1)s、%(val2)s和%(val3)s
然后当我尝试并执行这样的字符串时,我得到以下错误:
ProgrammingError:在“%”LINE 1:…(“Col1”,“Col2”,“Col3”)值(%(val1)s处或附近出现语法错误…
^
好的,我解决了这个问题。首先使用文字而不是占位符,然后将行值作为元组中的元组放在一起,循环将每个元组作为文字添加到列表中,然后在构建查询时在末尾插入。
问题内容: 假设我有一个存储在这样的变量中的查询(它实际上是动态填充的,并且更复杂,但这是出于演示目的): 有没有一种方法可以检查查询是否返回任何结果?像这样的东西,但这是行不通的: 我能想到的唯一方法是将结果放入临时表中,然后从中进行查询,但这并不理想,因为动态查询中的列可以变化,而且我真的不需要临时表除了检查是否会返回某些行外,完全出于其他原因。有没有更好的办法? 问题答案: 尝试执行和用于查
问题内容: 我有一个存储在列表中的关键字列表。 要从表中获取记录,请使用以下查询: 您可能已经注意到,我的查询容易受到sql注入的攻击,因此我想通过SqlCommand()使用参数。我已经尝试了以下方法,但仍然无法正常工作: 我在哪里犯错,或者应该怎么做? 问题答案: 您在这里做错了几件事: 您为所有参数赋予相同的名称。那行不通。参数需要唯一的名称。 您为每个项目创建一个新的SqlCommand。
我有一个这样的SQL问题 根据用户输入,我想将botcode='r1'更改为给定输入。在不重新启动作业的情况下说出botcode='r10'。有没有办法做到这一点。我在flink 1.7上使用stream env。我尝试配置流来读取输入。但仍停留在如何动态更改查询上。有人能帮我吗?提前谢谢
一般来说,我对python和编程都是新手。这段代码最终将在更大的应用程序中使用。我为任何错误提前道歉。我正在尝试从postgresql数据库中的表进行简单查询。唯一的结果是没有。尽管我知道那里有数据。提前感谢您的帮助。
问题内容: 我有一个数据库字段名称调用,我正在尝试使用如下所示的变量名称来选择它: 显然,SQL将解释为字符串,而不是数据库的字段,我如何以这种方式将其识别为字段名而不是字符串,可能没有任何select或if语句。 问题答案: 试试这个: 您必须组成一个动态查询,并使用 要在事物的“动态”方面添加更多内容,请使用存储过程。请参见此处的示例: http://www.marten-online.com
问题内容: 我已经徒劳地搜索了很长时间,不得不承认失败并寻求帮助,我正在尝试修改数据透视查询,以从具有以下数据的表中生成结果的动态查询: 为了显示这样的内容,其中页码列取决于用户访问的页面数: 我已经通过对列中的硬编码进行了管理,但是显然我不想继续更改脚本以容纳越来越多的页面。 到目前为止,我有一些类似的东西: 任何帮助或正确方向的指点将不胜感激! 提前致谢! 问题答案: 我所看到的关于动态枢轴的