python - 显示输出时出错 - Python - SQLite

标签 python python-3.x python-2.7 sqlite

我在列表中有一组数据,嵌入到字典中:

{'list1': ['Freddy','36','fred','123f','2017/04/25'], 'list2':['Tara','25','mtara','123t','2018/03/22']}

引用符号:
{ key1: [姓名, 年龄, 昵称, userid, account_created_date],
..key2:[姓名, 年龄, 昵称, userid, account_created_date] }

如上所述,所有数据都插入到 Python 函数的变量中,每个变量一个。当我调用该函数时,我会立即得到输出

输出:
弗莱迪
度母

但是当我尝试将数据插入到 sqlite 数据库中时,我得到的输出方式如下:

输出:
F


D
D

T
一个

一个

代码:
conn = sqlite3.connect(dbPath)
cur = conn.cursor()
results = cur.executemany("INSERT INTO Field (Field1) VALUES (?)", name)
conn.commit()

在此问题上请求您的帮助。非常感谢您的帮助。谢谢。

最佳答案

新答案

更直接地适合您的数据集。您需要一个字典列表,而不是列表字典,因为每个字典都将列名作为键,并有一个与该列(键)关联的值。

names = [{'name': "Freddy"}, {'name': "Joan"}]
results = c.executemany("INSERT INTO names ('name') VALUES (:name)", names)

其余的 SQLite3 代码工作,输出:

Freddy
Joan

使用元组列表的选项

您还可以使用元组列表。如果您不使用字典,则需要 make sure each row is in tuple form .您需要列表中的每个元组。 SQL查询后需要在executemany函数中调用这个列表。

基本代码:

names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)

输出:

Freddy
Joan

因此请确保每个条目都是元组或字典形式。然后将这些元组或字典放入列表中。如果它是字典形式,则不能使用“?”占位符。对每个占位符使用“:key_name”。 (这里可能有不同的选项,但我还没有找到)。

原始回复

我怀疑 executemany(...) 应该是 execute(...)。我已经有一段时间没有使用 SQLite3 了,所以我现在将对其进行测试以确保安全,然后再回复您。

更新 1:

我记得需要以元组形式发送“?”。 IE。

cur.executemany("INSERT INTO Field (Field1) VALUES (?)", name)

至少需要

cur.executemany("INSERT INTO Field (Field1) VALUES (?)", (name, ...))

但我只让 execute()(而不是 executemany())工作,否则它会返回相同的错误。所以,这是我到目前为止的工作代码:

cur.execute("INSERT INTO Field (Field1) VALUES (?)", (name,))

它给出了 F、R、E、D、D、Y,因为它正在读取每个字母作为元组中的值。如果它是元组形式,它会一次性读取“Freddy”。但我仍然对 executemany() 有疑问,我认为它的工作方式与我们认为的不同。

更新 2:

这就是我要做的工作。你需要 make sure each row is in tuple form .您需要列表中的每个元组。 SQL查询后需要在executemany函数中调用这个列表。

基本代码:

names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)

完整代码:

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()

# Create table
c.execute('''CREATE TABLE IF NOT EXISTS names
             (name text)''')

names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)
conn.commit()

for row in c.execute('SELECT * FROM names'):
    print(row[0])

打印出来:

Freddy
Joan

更新 3:

我已经对其进行了更新以更直接地适合您的数据集。您需要一个字典列表,而不是列表字典,因为每个字典都将列名作为键,并有一个与该列(键)关联的值。

这里还有一些代码,我已经开始工作了。

names = [{'name': "Freddy"}, {'name': "Joan"}]
results = c.executemany("INSERT INTO names ('name') VALUES (:name)", names)

使用其余代码,它输出:

Freddy
Joan

(灵感来自 this answer 。)

关于python - 显示输出时出错 - Python - SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55035355/

相关文章:

python - 当索引(日期时间)为星期日时从数据框中删除一行

python - 为什么我无法在提交给 ProcessPoolExecutor 的可调用对象中创建/访问 future?

python - 为什么重写 __contains__ 会破坏 OrderedDict.keys?

python - 如何将字符串转换为字典转义python中的特殊字符

python - Easy_install 不断将软件包安装到过时版本的 python

python - 在 Pandas 中重新索引和填充 NaN 值

python - 如何从两个列表中查找匹配的部分项目

python - Tkinter 页面未加载

Python Discord Bot - 调用函数时将消息发布到特定 channel

python - 用python3打印字符串格式: print from unpacked array *some* of the time