MySQLConverter'对象没有带有mysql-connector的属性'_tuple_to_mysql'异常

时间:2016-03-10 07:19:56

标签: python mysql types mysql-connector-python

我想通过mysql-connector使用python将8种数据插入到mysql表中。 我查看了一些文档,说使用mysql-connector时最好使用 int,string或tuple 。 我试图将一些数据类型调整为字符串或元组,但IDE仍然显示错误.... 如果有人请帮我澄清我将使用哪种数据类型。

数据结构设置如下(如果有什么比较好的话可以让我知道):

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| URL      | varchar(1023) | YES  |     | NULL    |       |
| Title    | varchar(1023) | YES  |     | NULL    |       |
| Content  | varchar(1023) | YES  |     | NULL    |       |
| Month    | varchar(1023) | YES  |     | NULL    |       |
| Date     | varchar(1023) | YES  |     | NULL    |       |
| Year     | varchar(1023) | YES  |     | NULL    |       |
| Time     | varchar(1023) | YES  |     | NULL    |       |
| TimeZone | varchar(1023) | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+

我的代码如下:

for i in range(len(URL)):
    dbcur.execute(
        """INSERT INTO scripting (URL, Title, Content, Month, Date, Year, Time, TimeZone)
           VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")""",
           ((URL[i],), (Title[i],), (Content[i],), (Month[i],), (Date[i],), (Year[i],), 
           (Time1[i],), (TimeZone[i],)))
    dbcon.commit()

ps-URL [],Title [],Content [] ... TimeZone []是数据列表,其范围相同。

  • 网址:网址。 我用元组设置它,它很好。(可以成功存储)

  • 标题:一篇文章的标题。(即句子) 我试图将其设置为(Title[i],)的元组或带StringIO.String(Title[i])的字符串,但错误是

    MySQLConverter' object has no attribute '_tuple_to_mysql  
    AttributeError: 'module' object has no attribute 'String'
    

    分开。

  • 内容:几句话。 遇到与上述相同的问题

  • 月,日,年,时间,时区: 还没试过,但我想我可以用元组类型导入这些数据吗?

我查看了stackoverflow并尝试了几种数据类型,但它仍然没有在这里工作。我如何处理这些数据可能有人让我知道?

3 个答案:

答案 0 :(得分:0)

你在tuple内包装每个单独的论点;不要这样做。 也就是说,改为:

dbcur.execute(
     """INSERT INTO scripting (URL, Title, Content, Month, Date, Year, Time, TimeZone) 
     VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")""",
     (URL[i], Title[i], Content[i], Month[i], Date[i], Year[i], Time1[i], TimeZone[i]))

您只需要在一个元组中包含所有替换值,没有例外。

我可以看到为什么你感到困惑("网址:网址。我用元组设置它并且没关系。" ):使用DBAPI a 单个值也需要包含在以下示例中的1元组中),但这仍然适用于此处的规则:

 dbcur.execute('INSERT INTO scripting (URL) VALUES (%s)', (URL,))

现在我们只替换URL,但我们仍然将#34;所有"包裹起来,例如单个参数,在一个元组中。

答案 1 :(得分:0)

Antti Haapala有一个很好的答案,但您也可以使用for row in zip(URL, Title, Content, Month, Date, Year, Time1, TimeZone): dbcur.execute( """INSERT INTO scripting (URL, Title, Content, Month, Date, Year, Time, TimeZone) VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")""", row) dbcon.commit() 构建要为您插入的行来整理它

If IsDBNull(dr(0)) Then

答案 2 :(得分:0)

在这里,我为您提供解决方案。

仅以三列为例。 URL,TITLE和CONTENT。 如前所述,URL和其他都是数据列表。

URL=['url1','url2','url3']
TITLE=['title1','title2','title3']

,依此类推。 并且您在DATABASE表中具有相同的列。

cursor_object.execute(query,params)

在此处写一个查询:

query='''
INSERT INTO scripting(URL, TITLE, CONTENT)
VALUES (%s,%s,%s)'''

并执行sql命令:

cursor_object.execute(query%(URL[i],TITLE[i],CONTENT[i]))

随后的翻译将是第一次迭代的结果。

'INSERT INTO scripting(url,title)VALUES(url1,title1)' url1不是实际翻译成mysql查询时的字符串。因此,您几乎不需要更改。

query='''
INSERT INTO scripting(URL, TITLE, CONTENT)
VALUES ("%s","%s","%s")'''

OR

或者您可以使用字典方法。

query=''' *query statement* values
(%(url)s,%(title)s,%(content)s)
dictionary={'url':'url1','title':'title1','content':'content1'}
cursor_object.execute(query,dictionary)

用于多行:

for i in range len(URL):
    cursor_object.execute(query,{'url':URL[i],'title':TITLE[i],'content':CONTENT[i]}

@Antti Haapala提供了最简单的解决方案。 希望你喜欢。