2015-08-30 42 views
0

我一直在Python中學習sqlite3,我想知道是否可以使用字符串格式編輯數據庫或查詢它。我可以使用字符串格式查詢python中的數據庫時

例如 - SELECT %s FROM (table_name) where %可以將用戶輸入存儲在一個變量中嗎?

我試過了,但它不起作用,所以有人請給我一個工作的例子。

任何幫助表示讚賞。由於

傢伙,我想這:

dursor = conn.execute("SELECT id FROM books") 
# this helps find the correct id for storing in the database 
for i in dursor: 
lis.append(i[0]) 
command = """INSERT INTO books VALUES ({0}, {name}, {author})""".format(lis[-1] + 1, name=client_name, author = client_author) 

然後

conn.execute(command) 

但它返回沒有這樣的列(名)

,當我試圖在汗學院的SQL相同的查詢它爲什麼不在這裏?

+0

謝謝你們,但我仍然不明白 – Tusky

回答

0

您可以在查詢字符串中放置問號,並在調用.execute()作爲元組時將參數從用戶輸入中傳遞出去。

雖然我不相信你在生產中使用它。如果是這樣的話,首先需要從用戶處獲取數據,然後對其進行清理,並確定是否真的想讓用戶按照自己的意願去做。

希望這有助於:

param1 = sys.argv[1] 
param2 = sys.argv[2] 
query = "SELECT ? FROM (table_name) where id = ?" 
cursor.execute(query, (param1,param2)) 
+0

由於它的工作和IM只是用它不學習生產:) – Tusky

+0

如果有幫助,並提供你的目的,那麼請接受通過點擊答案左側的大勾號來回答。 :) –

+0

儘管請幫忙,但我仍然有錯誤 – Tusky

0

我不確定你是否可以在sqlite3中做到這一點,但如果我是你,我會尋找任何替代方法。你真的想讓用戶能夠實時改變你的SQL嗎?這是您創建的潛在巨大安全漏洞。

例如用戶基本上可以改變...

select ? from innocentTable 

...到...

select * from tblUser -- from innocentTable 

...和拖網整個用戶表,只是需要多一點的猜測工作拿出了對象名稱。

我建議你閱讀SQL注入攻擊,然後尋找一種替代方法來實現你的建議。

相關問題