簡體   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