![](/img/trans.png)
[英]CoreData sqlite3 db - populating timestamp column with python script
[英]populating sqlite3 db with links in python
我正在尝试使用带有字符串列表(链接)的单列填充数据库。 我刮掉了列表,在将其发送到数据库之前,我必须修改每个链接。 这是代码:
for event in events:
link_url = "https://www.website.com"+event+"#all"
c.execute("INSERT INTO table (links) VALUES(?)", link_url)
如果我修改变量并发送一个元组,我可以让它工作,如下所示:
for event in events:
link_url = "https://www.website.com"+event+"#all"
link = (link_url,)
c.execute("INSERT INTO seriea (links) VALUES(?)", link_url)
但我不想使用这个解决方案,因为我想稍后得到一个字符串列表:
c = connection.execute('select links from table')
list_of_urls = c.fetchall()
但这给了我一个元组列表。
这是我遇到的错误: ProgrammingError: 提供的绑定数量不正确。 当前语句使用 1,提供了 80 个。
我认为这是因为字符串字符被计算在内(实际上更多,但我注意到“提供”之前的数字随着链接的变化而变化)
我不想使用此解决方案,因为我想稍后获取字符串列表:
c = connection.execute('select links from table') list_of_urls = c.fetchall()
但这给了我一个元组列表。
执行 select 时获得的元组列表与插入数据的方式无关。 请记住,表格有两个维度:
ID | 链接 | 某物 | 别的 |
---|---|---|---|
1 | “富” | “酒吧” | “巴兹” |
2 | “曲子” | “疱疹” | “德普” |
当您执行 select 时,您会得到一个与此处的行相对应的列表。 但每一行都有多个字段: id
、 links
、 something
和else
。 列表中的每个元组都包含表中每个字段的值。
如果您只想将 URL 作为字符串列表,则可以使用列表推导或类似方法:
c = connection.execute('select links from table')
list_of_rows = c.fetchall()
list_of_strings = [row[0] for row in list_of_rows]
# ^ index of first element in
# ^^^ the tuple of values for each row
请注意,插入数据时必须提供元组或其他序列:
对于 qmark 样式,
parameters
必须是一个序列。 对于命名样式,它可以是序列或字典实例。 序列的长度必须与占位符的数量匹配,否则会引发ProgrammingError
。 如果给定一个dict ,它必须包含所有命名参数的键。
您可能以错误的方式思考它的元组部分。 您不需要传入 URL 元组,您需要传入参数元组。 你不是说“链接列应该包含这个元组”,而是“这个元组包含足够的值来填充这个查询中的占位符”。
我会这样重写:
for event in events:
link_url = "https://www.website.com"+event+"#all"
c.execute("INSERT INTO seriea (links) VALUES(?)", (link_url,))
这样您就可以有多个参数,例如
c.execute(
"INSERT INTO seriea (links, some, other) VALUES(?, ?, ?)",
(link_url, foo, bar),
)
当前语句使用 1,提供了 80 个。
我认为那是因为字符串字符被计算在内
是的,这很可能是正在发生的事情。 c.execute()
期望接收一个序列,字符串是一个字符序列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.