簡體   English   中英

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

該表具有以下格式:

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 ||那樣出現在字符串中 您可以通過添加一些正則表達式邏輯來過濾掉此類異常來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM