MySQLConverter' object has no attribute '_tuple_to_mysql' exception with mysql-connector

那年仲夏 提交于 2019-12-02 05:45:08

问题


I have 8 kinds of data that I would like to insert into a mysql table through mysql-connector using python. I have looked at some documents saying that it is better to use int, string, or tuple when using mysql-connector. I have tried to adjust some data types into either string or tuple, but the IDE keeps showing error.... If anyone please help me clarify which data type I shall use.

The data structure is set as follows(if anything is better to be changed please kindly let me know):

+----------+---------------+------+-----+---------+-------+
| 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    |       |
+----------+---------------+------+-----+---------+-------+

My codes are as follows:

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[] are lists of data, and their ranges are the same.

  • URL: url. I set this with tuple and it is fine.(can be successfully stored)

  • Title: A title of an essay.(i.e. an sentence) I have tried to either set it as tuple with (Title[i],) or a string with StringIO.String(Title[i]), but the error are

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

    separately.

  • Content: several sentences. faced same problems as above

  • Month, Date, Year, Time, TimeZone: have not tried yet, but I guess I can import these data with tuple type?

I have looked over stackoverflow and tried several data types but it still doesn't work out here. How do I deal with these data may someone kindly let me know?


回答1:


You're wrapping each individual argument within a tuple; don't do that. That is, do this instead:

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

You only need to wrap all substituted values in one tuple, no exceptions.

I can see why you're confused ("URL: url. I set this with tuple and it is fine."): with DBAPI a single value also needs to be wrapped in 1-tuple in the following example), but that is still the same rule applying here:

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

Now we only substitute URL, but we still wrap "all", e.g. that single argument, in one tuple.




回答2:


Antti Haapala has a great answer but you could also tidy it up by using zip to build the row to insert for you

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


来源:https://stackoverflow.com/questions/35910023/mysqlconverter-object-has-no-attribute-tuple-to-mysql-exception-with-mysql-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!