2013-05-29 44 views
0

任何人都可以告訴我可以在Python中執行動態MySQL查詢的正確方法嗎?Python中的MySQL動態查詢

我想爲CREATE和INSERT語句執行動態查詢。我在這裏提到另一篇文章:

MySQL Dynamic Query Statement in Python

但沒有奏效。

這是我嘗試代碼:

sql="create table %s (%%s, %%s, %%s ...)" % (tablename,''.join(fields)+' '.join(types)) 
cur.execute(sql)  

其中「場」是存儲在一個列表和「類型」的字段名是存儲在一個列表中的域類型。

+0

錯誤我: 類型錯誤:不是字符串格式化 –

+0

作爲一個方面說明我會建議你使用像SQL鍊金術的ORM期間轉換所有的參數,它會使你的生活更輕鬆,並確保你正在安全的要求, http://www.sqlalchemy.org – lc2817

回答

0

Python和MySQLdb DB API使用%s來表示替換可能會引起混淆。對於DB API,它主要用於避免SQL注入攻擊。在cursor.execute()聲明中,僅使用%s其中字符串需要替換纔有意義。

例如。

你要執行的SQL語句:

CREATE TABLE foo (myfield INTEGER); 

CREATE TABLE 'foo' ('myfield' INTEGER); 

像下面可能是合適的:

field1_name_and_type = 'myfield VARCHAR(100)' 
sql="create table %s (%s)" % (tablename, field1_name_and_type) 
cur.execute(sql) 

然後,當你想INSERT到表中,使用execute語句中的%s來轉義str英格斯。

my_malicious_sql = input() 
cur.execute('INSERT INTO %s VALUES (%%s)' % tablename, my_malicious_sql) 

在這個例子中,第一個參數​​擴大這個樣子,如果tablename == "foo"

cur.execute('INSERT INTO foo VALUES (%s)', my_malicious_sql) 

然後,MySQLdb的圖書館將正確轉義任何字符串my_malicious_sql避免SQL注入錯誤和將文本插入到數據庫表中。

+0

我想要的是執行動態mysql查詢,而不是靜態的 –

+0

@rahul我的答案的最後一個例子顯示了一個部分動態的查詢。即表名是動態的。建立查詢由您決定。你究竟想達到什麼目的? –