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 的内容.

 

posted @ 2017-02-02 13:18  Herbert_Kwok  阅读(4928)  评论(0编辑  收藏  举报