使用 MySQLdb 插入 MySQL - python

Posted

技术标签:

【中文标题】使用 MySQLdb 插入 MySQL - python【英文标题】:Inserting into MySQL using MySQLdb - python 【发布时间】:2018-05-11 01:16:03 【问题描述】:

https://drive.google.com/open?id=1aQkJYojDNMjNjJYlggxbkTq-KmzALDDb

我有这个文件 (citations.dmp),我正在尝试插入由 | 分隔的数据使用以下代码进入 mysql 数据库:

import MySQLdb

file = open('citations.dmp', 'r').readlines()
list = []
for x in file:
    a = str(x.replace('\t', ''))
    a = str(a).split('|')
    a.pop(len(a) - 1)
    list.append(a)

db = MySQLdb.connect(
    host='127.0.0.1',
    user='root',
    passwd='',
    db='tururu'

)

c = db.cursor()


print('Inserting...')

query = """ INSERT INTO `citations` (`cit_id`,`cit_key`,`pubmed_id`,`medline_id`,`url`,`text`,`taxid_list`)
            VALUES (%s,%s,%s,%s,%s,%s,%s)           
        """

c.executemany(query, list)
db.commit()

db.close()

表格格式如下:

CREATE TABLE `citations` (
                  `cit_id` VARCHAR(200) NULL,
                  `cit_key` VARCHAR(200) NULL,
                  `pubmed_id` VARCHAR(200) NULL,
                  `medline_id` VARCHAR(200) NULL,
                  `url` LONGTEXT NULL,
                  `text` LONGTEXT NULL,
                  `taxid_list` LONGTEXT NULL);

由于某种原因,我每次都收到以下错误:

Traceback (most recent call last):
  File "C:/Users/lucas/PycharmProjects/bruno/tst.py", line 27, in <module>
    c.executemany(query, list)
  File "C:\ProgramData\Anaconda3\lib\site-packages\MySQLdb\cursors.py", line 281, in executemany
    self._get_db().encoding)
  File "C:\ProgramData\Anaconda3\lib\site-packages\MySQLdb\cursors.py", line 306, in _do_execute_many
    v = values % escape(arg, conn)

TypeError: not all arguments converted during string formatting

你能帮帮我吗?我在过去 3 天里试图修复它。

【问题讨论】:

您提供的谷歌文档链接不公开,您能解决这个问题吗?疯狂的猜测是,当您读取文件时,您最终会得到错误的列数,但我需要调试才能确定。 链接正在运行,抱歉。谢谢你的帮助。 尝试打印您的列表,看看所有值是否正确!!! 【参考方案1】:

您的导入文件中的这一行有问题:

  5384    |       Associate Editor IJSEM (2001) (Trichlorobacter thiogenes)       |       0       |       0       |                     |       Associate Editor, IJSEM \"Validation List no. 78 (footnote ||).\" Int. J. Syst. Evol. Micr      obiol. (2001) 51:1-2. (Note: type strain information) |       115783  |

它分为 9 个字段。插入查询的格式字符串只需要 7 个。您需要在文件解析中添加一些验证,以确保您推送到大导入列表(代码中的 list 变量)的子列表总是正好有 7 个元素, 并相应地处理异常 - 如果该行的列太少,则忽略它或填充默认值,如果它有太多,确定哪些是正确的。

我相信在这种特殊情况下,问题是由不正确的假设引起的,即分隔符 | 永远不会出现在字符串中,就像在 footnote || 中一样。您可以通过添加一些正则表达式逻辑来过滤掉此类异常来解决它。

【讨论】:

非常感谢您的时间和支持

以上是关于使用 MySQLdb 插入 MySQL - python的主要内容,如果未能解决你的问题,请参考以下文章

MySQLdb使用批量插入executemany方法插入mysql

Python 的 MySQLdb 在 Homebrewed MySQL 中找不到 libmysqlclient.dylib

在 python 中使用 MySQLdb 插入 mysql 后,如何安全有效地获取行 ID?

Mac MySQLdb模块安装,可算解决了

Python MySQLdb没有插入数据

带有字符编码的 Python MySQL 批量插入错误