撇開 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 的內容.