2012-07-14 129 views
0

我正在編寫一個在Google App Engine上運行的Python應用程序,並將數據寫入Google Fusion Table。 Fusion Tables API使用類似SQL的查詢來插入行。如何在不使用全面的ORM的情況下構建SQL查詢?

我目前正在建設的SQL查詢是這樣的:

fusion_table_id = "gobblygook" 
name = "John Doe" 
rank = "Captain" 
serial_number = 42 
SQL = "INSERT INTO %s (name, rank, serial_number) VALUES (%s, %s, %s)" % (fusion_table_id, name, rank, serial_number) 

這顯然是不理想的。除了潛在的攻擊之外,我遇到了各種引用轉義問題。

沒有使用全面的ORM(我不需要實際連接到數據庫),建立這些類型的SQL查詢的最好方法是什麼?

+0

發現是否有一個數據庫庫,提供參數化查詢? – Oded 2012-07-14 13:59:30

+1

http://xkcd.com/327/ – wildplasser 2012-07-14 13:59:40

+0

SQLAlchemy具有強大的SQL生成組件;您可以獨立於ORM部件使用它。但是你需要一個Fusion Tables方言插件,我找不到任何東西。 – 2012-07-14 15:45:47

回答

0

我覺得格式字符串提供的處理SQL查詢的好辦法:

params = { 
     'fusion_table_id': 'gobblybook', 
     'name': 'John Doe', 
     'rank': 'Captain', 
     'serial_number': 42, 
     } 

    SQL = "INSERT INTO {fusion_table_id} (name, rank, serial_number) VALUES ({name}, {rank}, {serial_number})".format(**params) 

更多信息可以在PEP-3101

+0

除了如果'fusion_table_id','name','rank'或'serial_number'源自不受信任的源(比如Web請求),您現在有一個SQL注入攻擊向量來處理;使用PEP-3101格式不提供任何優於OP方法的功能。 – 2012-07-14 15:39:42

+0

希望您使用wtforms等表單庫驗證數據,併爲您的字符串提供轉義和驗證數據。 – Jarrod 2012-07-14 15:46:30

+0

@Jarrod,這是OP想知道的:如何獲取這些數據:) – jadkik94 2012-07-14 16:03:25

相關問題