【问题标题】:MySQLConverter' object has no attribute '_tuple_to_mysql' exception with mysql-connectorMySQLConverter' 对象没有属性 '_tuple_to_mysql' 异常与 mysql-connector
【发布时间】:2016-06-24 21:58:45
【问题描述】:

我有 8 种数据想通过 mysql-connector 使用 python 插入到 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[] 是数据列表,它们的范围是一样的。

  • 网址:网址。 我用 tuple 设置这个就可以了。(可以成功存储)

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

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

    分开。

  • 内容:几句话。 遇到和上面一样的问题

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

我查看了 stackoverflow 并尝试了几种数据类型,但在这里仍然行不通。我该如何处理这些数据,有人可以告诉我吗?

【问题讨论】:

    标签: python mysql types mysql-connector-python


    【解决方案1】:

    这里我有一个解决方案。

    让我们仅以三列为例。 网址、标题和内容。 正如您提到的 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]))
    

    当它被翻译后将是第一次迭代的结果。

    '插入脚本(url,title)VALUES(url1,title1)' 实际翻译成mysql查询时,url1不是这里的字符串。所以你必须改变一点。

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

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

    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 给出了最简单的解决方案。 希望你喜欢。

    【讨论】:

      【解决方案2】:

      Antti Haapala 有一个很好的答案,但您也可以使用 zip 为您构建要插入的行来整理它

      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()
      

      【讨论】:

        【解决方案3】:

        您将每个单独的参数包装在 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]))
        

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

        我明白你为什么感到困惑(“URL: url。我用元组设置它,这很好。”​​):DBAPI 也有一个 single 值在以下示例中需要包装在 1 元组中),但这仍然是适用于此处的相同规则:

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

        现在我们只替换URL,但我们仍然包装“all”,例如那个单一的论点,在一个元组中。

        【讨论】:

          猜你喜欢
          • 2021-03-25
          • 2014-09-25
          • 2014-03-14
          • 2010-10-05
          • 2018-03-12
          • 2018-01-22
          • 2013-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多