区块链技术博客
www.b2bchain.cn

Python Sqlite3:插入表VALUE(字典在这里) – python程序员分享

本文介绍了Python Sqlite3:插入表VALUE(字典在这里) – python程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我想使用字典将值插入表中,该怎么做?

import sqlite3  db = sqlite3.connect('local.db') cur = db.cursor()  cur.execute('DROP TABLE IF EXISTS Media')  cur.execute('''CREATE TABLE IF NOT EXISTS Media(                 id INTEGER PRIMARY KEY, title TEXT,                  type TEXT,  genre TEXT,                 onchapter INTEGER,  chapters INTEGER,                 status TEXT                 )''')   values = {'title':'jack', 'type':None, 'genre':'Action', 'onchapter':None,'chapters':6,'status':'Ongoing'}  #What would I Replace x with to allow a  #dictionary to connect to the values?  cur.execute('INSERT INTO Media VALUES (NULL, x)'), values) cur.execute('SELECT * FROM Media')  meida = cur.fetchone()  print meida 

参考方案

如果您尝试使用dict来指定列名和值,则不能这样做,至少不能直接这样做。

这实际上是SQL固有的。如果不指定列名列表,则必须以CREATE TABLE顺序指定它们,而dict则不能这样做,因为dict没有顺序。当然,如果您确实想要,可以使用collections.OrderedDict,确保其顺序正确,然后只需传递values.values()即可。但是在那时候,为什么不首先拥有list(或tuple)呢?如果您完全确定已按正确的顺序获取了所有值,并且希望按顺序而不是按名称引用它们,那么您拥有的是list而不是dict

而且,无法绑定SQL中的列名(或表名等),仅绑定值。

当然,您可以动态生成SQL语句。例如:

columns = ', '.join(values.keys()) placeholders = ', '.join('?' * len(values)) sql = 'INSERT INTO Media ({}) VALUES ({})'.format(columns, placeholders) cur.execute(sql, values.values()) 

但是,这几乎总是一个坏主意。这确实比生成并exec动态Python代码更好。首先,您已经失去了使用占位符的所有好处—主要是防止SQL注入攻击,但又减少了数据库引擎中不太重要的事情,例如更快的编译,更好的缓存等。

最好退一步并从更高的角度来看这个问题。例如,也许您并不是真的想要一个静态的属性列表,而是一个名称-值MediaProperties表?或者,或者,也许您想要某种基于文档的存储(无论是功能强大的nosql系统,还是只是存储在shelve中的一堆JSON或YAML对象)?

另一种使用named placeholders的方法:

columns = ', '.join(my_dict.keys()) placeholders = ':'+', :'.join(my_dict.keys()) query = 'INSERT INTO my_table (%s) VALUES (%s)' % (columns, placeholders) print query cur.execute(query, my_dict) con.commit() 

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)… python文件:def get(request): … return Response(seriali…

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Python Sqlite3:插入表VALUE(字典在这里) – python程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们