Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL来处理“中的表更新”;“动态类型”;时尚_Python_Sql_Sqlite_Python 3.x - Fatal编程技术网

Python SQL来处理“中的表更新”;“动态类型”;时尚

Python SQL来处理“中的表更新”;“动态类型”;时尚,python,sql,sqlite,python-3.x,Python,Sql,Sqlite,Python 3.x,我正在使用Python3的sqlite3模块,并在此过程中熟悉SQL 我已经编写了一个玩具程序来散列一个salt密码,并将其、相关用户名和salt存储到数据库中。我认为创建签名功能是很直观的: def store(table, data, database=':memory:') 例如,store('logins',{'username':'bob','salt':'foo','salted_hash':'bar'})可调用为,并且能够单独添加到logins,添加到新的行中,username的

我正在使用Python3的
sqlite3
模块,并在此过程中熟悉SQL

我已经编写了一个玩具程序来散列一个salt密码,并将其、相关用户名和salt存储到数据库中。我认为创建签名功能是很直观的:

def store(table, data, database=':memory:')
例如,
store('logins',{'username':'bob','salt':'foo','salted_hash':'bar'})可调用为
,并且能够单独添加到
logins
,添加到新的行中,
username
的值
bob
salt
的值
foo
,等等

不幸的是,我被编写什么样的SQL所困扰。我试图以一种“动态类型”的方式来实现这一点,例如,我不会因为存储了错误的类型而受到惩罚,或者能够随意添加新的列

我希望函数能够对所有输入进行消毒:

  • 检查该表是否存在,如果不存在,则创建该表,并将字典中传递的键作为列
  • 如果表已经存在,请检查表是否具有指定的列(传递的字典的键),如果没有,则添加它们(SQL是否可能这样做?)
  • 将my dictionary中的各个值添加到dictionary中相应的列中
对于后者,我可以使用
INSERT
,但它似乎非常严格。例如,如果列不存在,会发生什么?那么我们如何才能添加它们呢

我不介意代码是根据Python3的
sqlite3
定制的,还是仅仅将SQL作为大纲;只要我能在一定程度上使用它(并从中学习),我非常感激

(另一方面,我想知道我还可以使用哪些方法来代替SQL关系数据库;我以前使用过Amazon的SimpleDB,并考虑过使用它,因为它是非常“动态类型化”的,但我想知道我必须为此使用什么SQL代码。)

  • SQLite3是动态类型的,因此没有问题

  • 如果不存在,则创建表格…
    请参阅

  • 您可以使用中记录的
    sqlite\u master
    查看表中是否已经存在您需要的列。您需要解析
    sql
    列,但由于它正是您的程序创建表所提供的,因此您应该知道语法

  • 如果该列不存在,您可以
    altertable?添加列…
    请参见


  • 您是否考虑过使用成熟的ORM?SQLAlchemy()是非常时髦的rdbms,如果您想要一个完全无模式/动态的体验,sqlite不是正确的选择。