当前位置: 首页 > 面试题库 >

如何显式引用字符串值(Python DB API / Psycopg2)

仲孙兴旺
2023-03-14
问题内容

由于某些原因,我想对字符串值进行显式引用(成为构造的SQL查询的一部分),而不是等待cursor.execute方法对其第二个参数的内容执行隐式引用。

“隐式报价”是指:

value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;"
cursor.execute( query, (value,) ) # value will be correctly quoted

我更喜欢这样的东西:

value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;" % \
    READY_TO_USE_QUOTING_FUNCTION(value)
cursor.execute( query ) # value will be correctly quoted, too

READY_TO_USE_QUOTING_FUNCTIONPython DB API规范是否期望如此低的级别(我在PEP 249文档中找不到这样的功能)。如果没有,也许Psycopg2提供了这样的功能?如果没有,也许Django提供了这样的功能?我不想自己写这样的功能…


问题答案:

好的,所以我很好奇,然后去看看psycopg2的来源。事实证明,我不必比示例文件夹更进一步:)

是的,这是psycopg2特有的。基本上,如果你只想引用字符串,则可以执行以下操作:

from psycopg2.extensions import adapt

print adapt("Hello World'; DROP DATABASE World;")

但是,你可能想做的就是编写和注册自己的适配器。

在psycopg2的examples文件夹中,你找到文件“ myfirstrecipe.py”,其中有一个示例,介绍了如何以特殊方式强制转换和引用特定类型。

如果你有想要做的事情的对象,则可以创建一个符合“ IPsycopgSQLQuote”协议的适配器(有关myfirstrecipe.py-example的信息,请参阅pydocs …实际上,这是我可以找到的唯一参考名称) )引用你的对象,然后像这样注册它:

from psycopg2.extensions import register_adapter

register_adapter(mytype, myadapter)


 类似资料:
  • 如果我使用打印字典,它总是将字符串环绕单引号(): 有没有办法告诉使用双引号()来代替?我希望有以下行为:

  • 问题内容: 我有一个Repeater及其SqlDatasource嵌套在Gridview TemplatedField中。 使用Gridview中的Eval的FormatString设置Repeater的数据源SelectCommand。 SelectCommand具有WHERE子句,该子句用于比较字符串。 因为我已经使用了单引号和双引号,所以在SQL WHERE子句中定界字符串时遇到了麻烦。 如

  • 问题内容: 如何获得“ E”输出而不是69? Golang是否具有将字符转换为字节,反之亦然的功能? 问题答案: 解释的字符串文字是使用单个字符的UTF-8编码(可能是多字节)在双引号“”之间的字符序列。在UTF-8中,ASCII字符是单字节,对应于前128个Unicode字符。字符串的行为就像字节片。符文是标识Unicode代码点的整数值。因此, 输出: 读: 进入转换的编程语言规范部分。 Go

  • 如何得到一个“E”的输出而不是69? Golang是否有将字符转换为字节的功能,反之亦然?

  • 我正在做一个关于图灵机的项目,我有一个关于如何替换字符串的某个索引中的字符的问题 这是我的代码 runbutton.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent ActE){

  • 我可以将替换为其他一些字符序列(例如)来执行字符串替换,但是如果我可以用正则表达式来替换,这将更加清楚。