Отсутствующее значение для необнуляемого столбца было добавлено при вставке pymysql в MariaDB
В следующем сценарии я ожидал исключение, но получил предупреждение:
# MariaDB: 10
create table tm
(
id int auto_increment primary key,
col1 int not null
) ENGINE = InnoDB;
Мой сценарий:
# Python: 3.6.1
# PyMySQL: 0.7.11
import pymysql
def main():
connection = None
try:
connection = pymysql.connect(host='localhost',
port=3306,
user='username',
password='password',
db='dev')
with connection.cursor() as cursor:
sql = 'INSERT INTO `tm` (`tm`.`id`) VALUES (DEFAULT)'
cursor.execute(sql)
connection.commit()
finally:
connection.close()
if __name__ == '__main__':
main()
В оболочке:
$ ./main.py
.../venv/lib/python3.6/site-packages/pymysql/cursors.py:166: Warning: (1364, "Field 'col1' doesn't have a default value")
result = self._query(query)
После исполнения запись с col1
равный 0 был добавлен в базу данных. Затем я выполнил запрос прямо в консоли MariaDB. я получил [HY000][1364] Field 'col1' doesn't have a default value
и ни одна запись не была вставлена.
Я проверил SQL_MODE
от SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
и получил:
global session
1 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Как это случилось в движке InnoDB?