将列表插入mysql数据库

时间:2013-12-09 17:45:06

标签: python mysql-python

我有这个列表,我试图插入我的数据库。我尝试了许多其他方法,我在谷歌或这里找到但似乎都没有。

results = ['match number 1','match number 2','match number 3']
query = "INSERT INTO round1 (details) VALUES ("
query = query+"'"+results+"')"
x = conn.cursor()
x.execute(query)
conn.commit()

我一直收到此错误

Type Error: cannot concatenate 'str' and 'list' objects

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

不要使用连接,请使用SQL参数:

query = "INSERT INTO round1 (details) VALUES (%s)"
c = conn.cursor()
c.executemany(query, [(r,) for r in results])

您的代码尝试将整个列表与字符串连接起来;你只能将字符串连接到字符串。但是要为每个值插入多行,您需要在INSERT中为每个条目运行results语句

在这里使用SQL参数有几个优点:

  • 您可以将值引用到数据库,避免SQL注入攻击。
  • 数据库可以重用SQL语句的查询计划,从而优化数据库性能。
  • 您可以使用cursor.executemany()使用不同的值运行相同的查询,只需一次调用。

此处的cursor.executemany()调用会在第二个参数中找到每个“行”,从每行中获取值以运行单独的INSERT语句。

答案 1 :(得分:0)

  

我不断收到此错误类型错误:无法连接'str'和'list'对象,任何人都可以告诉我我做错了什么?

首先,你所做错的是尝试连接str和list对象。你不能那样做:你只能用字符串连接一个字符串。

其次,使用预准备语句而不是字符串操作来与数据库进行通信。它将为您提供更少的代码,更安全。