鍍金池/ 問答/Python  Linux  數(shù)據(jù)庫/ PyMysql拋出一個警告異常,無法插入數(shù)據(jù)。

PyMysql拋出一個警告異常,無法插入數(shù)據(jù)。

捕捉PyMysql的警告異常的時候,之前可以插入數(shù)據(jù),但是現(xiàn)在突然無法插入數(shù)據(jù)。
一直會報一個主鍵沖突的警告。但是之前對于這個警告,確實是可以正確的插入數(shù)據(jù),自己還寫了一篇博客說明了捕捉警告異常時需要注意的問題。詳見
這是我數(shù)據(jù)庫的已有的數(shù)據(jù)
數(shù)據(jù)庫數(shù)據(jù)

然后執(zhí)行下面的語句,會報一個主鍵沖突的警告。

>>> import pymysql as pm
>>> from warnings import filterwarnings
>>> filterwarnings('error', category=pm.Warning)
>>>
>>> hosts = '127.0.0.1'
>>> port = 3306
>>> db = '*****'
>>> user = 'root'
>>> pw = '****'
>>> ope = pm.connect(host = hosts,
...                               port = port,
...                               db = db,
...                               user = user,
...                               password = pw,
...                               charset = 'utf8mb4')
>>> cursor = ope.cursor()
>>>
>>> sql = 'INSERT IGNORE INTO `db_fan` VALUES (1040140724, 2713582921), (1040140724, 1658632135), (1040140724, 5797386896), (1040140724, 5651860686), (1040140724, 2972805212), (1040140724, 5772420820), (1040140724, 5732820113), (1040140724, 5607417885), (1040140724, 5727563505), (1040140724, 1038473082), (1040140724, 5698742027), (1040140724, 2174810337), (1040140724, 5668873560), (1040140724, 1688464225)'
>>>
>>> try:
...     cursor.execute(sql)
... except pm.Warning as w:
...     ope.commit()
...     print (repr(w))
...
Warning(1062, "Duplicate entry '1040140724-2713582921' for key 'PRIMARY'")

我把密碼是數(shù)據(jù)庫名用星號代替了。如果換成MySqldb也會有同樣的問題。

python的版本是3.5.2.系統(tǒng)是Ubuntu16.04

回答
編輯回答
陪妳哭

你之前能插入數(shù)據(jù)一定是除了有沖突的外,還有一部分不沖突的,所以能. 當所有數(shù)據(jù)都有主鍵沖突時,也就一條也插不進去了.
沖突的數(shù)據(jù)還能插進去,那主鍵不就沒有意義了么

select * from db_fan where uid=1040140724 and fan_id=2713582921;

執(zhí)行上面這條SQL試試,如有結(jié)果返回說明數(shù)據(jù)庫沒有在說慌

2017年6月8日 16:45