我想通过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并尝试了几种数据类型,但它仍然没有在这里工作。我如何处理这些数据可能有人让我知道?
答案 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提供了最简单的解决方案。 希望你喜欢。