Ada*_*tan 1 python variables psycopg2
我有一个Python函数,它接收许多变量,并从中构建一个SQL查询:
def myfunc(name=None, abbr=None, grade=None, ...)
Run Code Online (Sandbox Code Playgroud)
这些值应构建SQL查询.为此目的,那些平等的人None
应该改为NULL
,而存储有用价值的人应该接受'
s:
name="'"+name+"\'" if name else 'NULL'
abbr="'"+abbr+"\'" if abbr else 'NULL'
...
Lots of lines here - that's my problem!
...
Run Code Online (Sandbox Code Playgroud)
然后,
query="""INSERT INTO table(name, abbr, ...)
VALUES (%(name)s, %(abbr)s, ...) """ locals()
cur.execute(query)
Run Code Online (Sandbox Code Playgroud)
是否有更好的,更Pythonic方式根据此规则更改变量内容?
亚当
形成SQL查询的最佳方法不是通过字符串格式化 - 对象的execute
方法cursor
采用带有占位符的查询字符串和序列(或dict,具体取决于您对DB API的具体实现)以及值替代那里; 然后它将执行您需要的None-to-Null和字符串引用.
我强烈建议你研究一下这种可能性.但是,如果您需要字符串处理用于其他目的,您可以执行以下操作:
processed = dict((n, "'%s'" % v if v is not None else 'NULL')
for n, v in locals().iteritems())
Run Code Online (Sandbox Code Playgroud)
然后使用字典processed
而不是locals()
进一步的字符串格式.
归档时间: |
|
查看次数: |
191 次 |
最近记录: |