使用 MySQLdb 插入 MySQL - python
Inserting into MySQL using MySQLdb - python
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()
table 具有以下格式:
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 天试图修复它。
导入文件中的这一行有问题:
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 ||
中一样。您可以通过添加一些正则表达式逻辑来过滤掉此类异常来解决它。
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()
table 具有以下格式:
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 天试图修复它。
导入文件中的这一行有问题:
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 ||
中一样。您可以通过添加一些正则表达式逻辑来过滤掉此类异常来解决它。