题
我有一个蟒蛇的功能,其接收的许多变量,并建立一个SQL query出它们:
def myfunc(name=None, abbr=None, grade=None, ...)
这些价值观应该建立一个SQL query.为此目的,这些人平等 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)
是有一个更好的,更多的功能已大大增强的方式来改变内容,根据这条规则?
亚当
解决方案
,以形成一个SQL查询的最好方法是不被串格式化 - 一个execute
对象的cursor
方法需要一个查询字符串用占位符和一个序列(或字典,取决于确切的实现你有DB API)的使用来替代那里的值;然后其将执行无对空和字符串引用您需要。
我强烈建议你考虑这种可能性。如果你需要的字符串处理一些其他的目的,但是,你可以这样做:
processed = dict((n, "'%s'" % v if v is not None else 'NULL')
for n, v in locals().iteritems())
,然后使用字典processed
代替locals()
进一步串格式化。
不隶属于 StackOverflow