在循环中将字符串插入到表中
Posted
技术标签:
【中文标题】在循环中将字符串插入到表中【英文标题】:Inserting strings to a table in a loop 【发布时间】:2019-06-13 08:09:10 【问题描述】:您好,我正在尝试通过 python3 中的 sqlite3 在 sqlite 中创建表。 到目前为止我得到的代码是:
import sqlite3
text="hello"
db = sqlite3.connect('C:/DB.db')
c = db.cursor()
c.execute("CREATE TABLE %s (sida)" % name)
for i in range(10):
c.execute("INSERT INTO %s VALUES (%s)" % (name, str(text))) # This does not work
db.commit()
db.close()
c.close
将值从 str(text) 更改为 i 有效;
c.execute("INSERT INTO %s VALUES (%s)" % (name, i)) # This works
传递整数作为值有效,但不是字符串。我一直在努力寻找解决方案,但我被困住了。
我得到的错误是:
c.execute("INSERT INTO %s VALUES (%s)" % (name, str(text))) sqlite3.OperationalError:靠近“a2”:语法错误
【问题讨论】:
【参考方案1】:您应该为您的插入使用准备好的语句,将值绑定到任何存在的占位符:
c = db.cursor()
c.execute("CREATE TABLE %s (sida)" % name)
for i in range(10):
c.execute("INSERT INTO %s VALUES (?)" % name, (str(text),))
db.commit()
db.close()
c.close
其实,最好不要让表名本身动态化。
【讨论】:
哇,真快!谢谢蒂姆!超时后我会接受你的回答 只是为了记录,您的查询/代码中的确切失败模式是您在VALUES
子句中有一个未引用的字符串。您可以通过在name
周围加上单引号来修复它,但是使用准备好的语句是一个更好的修复方法。
如果你不介意,我会偷偷问另一个问题: c.execute("CREATE TABLE %s (sida)" % str(name) 如果名称由“/”组成,则不接受或“:”或类似字符。有没有办法允许这样做?
是的,将表名放在双引号中,例如CREATE TABLE "blah/stuff"
。但是,我不建议您在表名或列名中使用特殊字符,因为您将永远不得不用双引号对它们进行转义。
哦,好吧,表的名称也是动态的(我在原始问题中省略了该部分)。我会四处寻找,看看是否找到适合我需要的东西。再次感谢!以上是关于在循环中将字符串插入到表中的主要内容,如果未能解决你的问题,请参考以下文章