我正在玩Python 3的sqlite3
模塊,並熟悉了SQL。SQL以「動態類型」方式處理表更新
我已經寫了一個玩具程序來散列醃製密碼,並將它,相關用戶名和鹽存儲到數據庫中。我認爲這將是直觀的創建簽名的功能:
def store(table, data, database=':memory:')
可贖回,例如,store('logins', {'username': 'bob', 'salt': 'foo', 'salted_hash' : 'bar'})
,並能夠單獨爲username
加入到logins
,進入新的一排,價值bob
,foo
對於salt
,et caetera。
不幸的是我用什麼SQL來編碼。我試圖以「動態類型」的方式做到這一點,例如,我不會因爲存儲錯誤的類型而受到懲罰,或者可以隨意添加新的列。
我想要的功能,消毒所有輸入:
- 檢查表存在,如果沒有,從字典中的列所傳遞的密鑰,來創建它;
- 如果表已經存在,檢查一個表是否有指定的列(對傳入字典的鍵),如果沒有,就添加它們(這甚至可能用SQL?);
- 將我的字典中的各個值添加到字典中的相應列。
我可以使用INSERT
爲後者,但它似乎非常嚴格。例如,如果列不存在會發生什麼?我們如何添加它們?
我不介意代碼是爲Python 3的sqlite3
定製的,還是隻是SQL作爲大綱;只要我能夠在一定程度上使用它(並從中吸取教訓),我非常感激。 (在不同的說明中,我想知道我可以使用什麼其他方法來代替SQL'd關係數據庫;我之前使用過亞馬遜的SimpleDB,並已考慮將其用於此目的,因爲它是很 「動態類型」,但我想知道我不得不爲此使用什麼SQL代碼。)
你有沒有使用一個完全成熟的ORM考慮? SQLAlchemy(http://www.sqlalchemy。org /)非常時髦 – carl 2010-08-26 16:43:28
如果你想要一個完全的無模式/動態體驗,像sqlite這樣的rdbms並不是正確的選擇。 – TTT 2010-08-26 23:20:12