繁体   English   中英

Python:自动更改变量内容

[英]Python: automated change in variable contents

我有一个Python函数,该函数接收大量变量,并根据它们构建一个SQL查询:

def myfunc(name=None, abbr=None, grade=None, ...)

这些值应建立一个SQL查询。 为此,这些谁等于None应更改为NULL ,和那些谁保存有用的值应该与拥抱' S:

name="'"+name+"\'" if name else 'NULL'
abbr="'"+abbr+"\'" if abbr else 'NULL'
...
Lots of lines here - that's my problem!
...

然后,

query="""INSERT INTO table(name, abbr, ...)
         VALUES (%(name)s, %(abbr)s, ...) """ locals()
cur.execute(query)

是否有更好的,更Python化的方法来根据此规则更改变量内容?

亚当

形成SQL查询的最佳方法不是通过字符串格式设置- cursor对象的execute方法采用带有占位符和序列(或dict,具体取决于您对DB API的确切实现)的查询字符串并带有在那里替代的价值; 然后它将执行所需的从无到空和字符串引用。

我强烈建议您研究这种可能性。 但是,如果出于其他目的需要字符串处理,则可以执行以下操作:

processed = dict((n, "'%s'" % v if v is not None else 'NULL')
                 for n, v in locals().iteritems())

然后使用字典processed而不是locals()进行进一步的字符串格式化。

您可以如下定义myfunc

def myfunc(*args, **kwargs)

其中kwargs是一个字典,其中包含所有传递给函数的命名参数。

要获取查询参数的值,可以使用kwargs.get(name_of_parameter, 'NULL') 要构建查询,您只需遍历所有字典项。 但是请注意,如果以此方式进行操作,则任何作为命名参数传递给函数的参数都将最终出现在查询中。

将参数传递给psycopg2的正确方法是使用占位符,并让驱动程序处理这些值 没有一个将自动转换为NULL,并且执行了正确的字符串转义。

连接字符串不是一个好主意

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM