2017-12-05 15 views
0

CONTEXT

Ubuntuの16.04:PythonのMySQLのコネクタのPythonのMySQL Connectorエラー診断

OBSERVATIONS

cursor.execute声明は、MySQL 5.5.8データベースに対象レコードを追加します。下のエラーでのMySQL 8.0.3結果に追加しようとします。

>>> cursor.execute(add_scan, data_scan) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 551, in execute 
    self._handle_result(self._connection.cmd_query(stmt)) 
    File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 490, in cmd_query 
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) 
    File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 395, in _handle_result 
    raise errors.get_exception(packet) 
mysql.connector.errors.DatabaseError: 1364 (HY000): Field 'scantime' doesn't have a default value 

は、このラインは、その後の.pyスクリプトがエラーの兆候なしに実行を完了し、コメントアウトされています。

質問

  • 新しいMySQLのデータベース8に互換性がないだけであることの問題ですか?
  • MySQLコネクタは何とか更新できますか?

答えて

3

いずれかのサーバーがデフォルトで厳密モードで実行されています。サーバーが厳密なモードで実行されている(または接続で設定した)場合、NOT NULLとして定義された列にNULL値を挿入しようとすると、#1364エラーが発生します。 strictモードがなければ、あなたのNULL値は空の文字列または0に置き換えられます

例:

CREATE TABLE `test_tbl` (
`id` int(11) NOT NULL, 
`someint` int(11) NOT NULL, 
`sometext` varchar(255) NOT NULL, 
`somedate` datetime NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

SET sql_mode = ''; 
INSERT INTO test_tbl(id) VALUES(1); 
SELECT * FROM test_tbl; 
+----+---------+----------+---------------------+ 
| id | someint | sometext | somedate   | 
+----+---------+----------+---------------------+ 
| 1 |  0 |   | 0000-00-00 00:00:00 | 
+----+---------+----------+---------------------+ 
SET sql_mode = 'STRICT_ALL_TABLES'; 
INSERT INTO test_tbl(id) VALUES(2); 
#1364 - Field 'someint' doesn't have a default value 

出典:MySQL INSERT without having to specify every non-default field (#1067 - Invalid default value for 'table')

修正:null以外を削除するか、デフォルトに設定し、そのフィールドを変更CURRENT_TIMESTAMPなどの値

+1

ファイル 'scantime'のデフォルトのタイプを「CURRENT_TIMESTAMP」に変更し、レコードが正常に追加されました。ありがとうございました! – gatorback

関連する問題