我想在我的数据库中插入一个列表,但是我不能。使用Python将列表插入到我的数据库中
这里是什么,我需要一个例子:
variable_1 = "HELLO"
variable_2 = "ADIOS"
list = [variable_1,variable_2]
INSERT INTO table VALUES ('%s') % list
能像这样做呢?我可以插入一个列表作为一个值吗? 当我尝试它时,错误说这是因为MySQL语法错误
我想在我的数据库中插入一个列表,但是我不能。使用Python将列表插入到我的数据库中
这里是什么,我需要一个例子:
variable_1 = "HELLO"
variable_2 = "ADIOS"
list = [variable_1,variable_2]
INSERT INTO table VALUES ('%s') % list
能像这样做呢?我可以插入一个列表作为一个值吗? 当我尝试它时,错误说这是因为MySQL语法错误
原始问题的答案是:不,您不能插入这样的列表。
然而,随着一些调整,你可以把这些代码工作通过%r
并传入一个元组:
variable_1 = "HELLO"
variable_2 = "ADIOS"
varlist = [variable_1, variable_2]
print "INSERT INTO table VALUES %r;" % (tuple(varlist),)
不幸的是,变量插入这种风格让你的代码容易受到SQL injection attacks。
相反,我们建议使用Python's DB API和构建定制的查询字符串与多个问号将被插入的数据:
variable_1 = "HELLO"
variable_2 = "ADIOS"
varlist = [variable_1,variable_2]
var_string = ', '.join('?' * len(varlist))
query_string = 'INSERT INTO table VALUES (%s);' % var_string
cursor.execute(query_string, varlist)
的例子在SQLite3 docs年初展示了如何使用的问题来传递参数标记,它解释了为什么它们是必要的(本质上,它确保正确引用您的变量)。
你的问题不清楚。
是否要将列表作为以逗号分隔的文本字符串插入数据库的单个列中?或者你想将每个元素插入一个单独的列?要么是可能的,但技术是不同的。
插入逗号分隔的列表合并到一列:
conn.execute('INSERT INTO table (ColName) VALUES (?);', [','.join(list)])
插入到单独的列:
params = ['?' for item in list] sql = 'INSERT INTO table (Col1, Col2. . .) VALUES (%s);' % ','.join(params) conn.execute(sql, list)
两个假设你已经建立的连接名称康涅狄格州。
其他一些建议:
尽量避免的INSERT语句不列出你插入的列的名称和顺序。这种说法会导致非常脆弱的代码;如果您在表格中添加,删除或移动列,它会中断。
如果要插入一个逗号separted列表为单场,通常违反数据库设计的校长,你应该使用一个单独的表每个记录一个值。
如果您插入单独的字段,并且它们的名称类似于Word1
和Word2
,那么同样表明您应该使用单独的表格。
切勿使用直接字符串替换来创建SQL语句。如果其中一个值为,例如o'clock
,它将会中断。它还会向您介绍使用SQL注入技术的人员的攻击。
HI Larry .... 我想插入两个不同的字符串在同一列....所以当我让查询获得内部是什么该colum ....我知道有两个不同的字符串.....这就是为什么我试图插入值作为列表 – mauguerra
你不能这样做。一列只能容纳一个字符串。您可以在该字符串中使用逗号,使其看起来像两个不同的字符串,但显然,如果其中一个字符串*已经*有逗号,则不起作用。但是您应该查看数据库规范化的想法,并重新设计数据库以使用单独的相关表来保存这些值。永远不会将多个值放入数据库列中。 –
您可以使用json.dumps
将列表转换为json并将json写入db。
例如:
insert table example_table(column_name) values(json.dumps(your_list))
这个例子很混乱。你不能在SQL字符串中使用像'json.dumps'这样的Python函数。您必须先调用'json.dumps',然后使用其他答案中建议的其中一个参数替换方法将生成的JSON字符串作为参数传递。将JSON字符串存储在数据库列中通常也不是一个好主意。 – tsleyson
在一般情况下,如果你有一个错误信息,你应该包括它的问题。 –
为什么不使用redis?如果使用ast和redis-py模块,你可以写一个列表到redis.eg.r.set(a,[1,23,3])当你需要这个对象时,你可以使用b = ast.literal_eval(r.get(a))来获取列表 –