python 操作 mysql 數據庫 datetime 屬性字段為 0000-00-00 00:00:00 的問題


撇開 sqlalchemy, 先講 MySQLdb 和 pymysql

mysql 版本 mysql  Ver 14.14 Distrib 5.1.73

 

新建一個測試表 test, 結構如下:

mysql> desc test;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| id       | int(11)  | NO   | PRI | NULL    |       |
| req_time | datetime | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 

使用 MySQLdb 原生轉義

cursor.execute("insert into test values (%s, %s)", (1, None))

None 插入后在 mysql 顯示為 NULL

mysql> select * from test;
+----+----------+
| id | req_time |
+----+----------+
|  1 | NULL     |
+----+----------+

 

如果自己拼接 sql, 就會遇到問題

cursor.execute("insert into test values (%s, '%s')" % (0, None))

None 插入后在 mysql 顯示為 0000-00-00 00:00:00

mysql> select * from test;
+----+---------------------+
| id | req_time            |
+----+---------------------+
|  0 | 0000-00-00 00:00:00 |
+----+---------------------+

 

對於大批量的插入, 可以使用 cursor.executemany, 唯一的缺點就是, sql 語句要寫太多的 "%s", 看起來不夠美觀.

從各個方面看, sqlalchemy 是最好的選擇, 有時間再更新 sqlalchemy 的內容.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM