insert NULL into mysql
https://stackoverflow.com/questions/36898130/python-how-to-insert-null-mysql-values
You are inserting the string 'NULL', not the NULL value. If these values are coming from a Python structure, you need to use something else to map to the NULL value in SQL.
You could use None for this, and only quote other values:
def sqlquote(value):
    """Naive SQL quoting
    All values except NULL are returned as SQL strings in single quotes,
    with any embedded quotes doubled.
    """
    if value is None:
         return 'NULL'
    return "'{}'".format(str(value).replace("'", "''"))
sql = "INSERT INTO test VALUES ({column1}, {column2}, {column3})".format(
    **{k: sqlquote(v) for k, v in d.items()})
Note that because you have to handle None differently, you also have to handle proper SQL quoting! If any of your values directly or indirectly come from user-supplied data, you'd be open for SQL injection attacks otherwise.
The above sqlquote() function should suffice for SQLite strings, which follow standard SQL quoting rules. Different databases have different rules for this, so tripple check your documentation.
Personally, I'd use the SQLAlchemy library to generate SQL and have it handle quoting for you. You can configure it to produce SQL for different database engines.
插入空的datetime类型:
sql = "INSERT INTO test_data_table (`data`, char_test, datetime_test) VALUES (%s, %s, %s)" % ('NULL', 'NULL', "'2017-09-01'")
sql = "INSERT INTO test_data_table (`data`, char_test, datetime_test) VALUES (%s, %s, %s)" % ('NULL', 'NULL', 'NULL')
注意两者之间的不同。
简而言之,python遇到None,需要在数据库插入'NULL'需要有一个转化过程,将None转为NULL,并视情况加单双引号,不加''在%s.
数字插入空值
INSERT INTO company (company_id, name, employee_nums) values (%s, %s, %s) on duplicate key update company_id = values(company_id), name=values(name), employee_nums=values(employee_nums);
args = (1, "test_name", None) # None will be convert to NULL
conn._cur.execute(sql, arg)
# 再次更新,%s全部不加引号,在传值之前处理完毕
INSERT INTO company (company_id,  name, employee_nums, registered_date) 
values (%s, %s, %s, %s) 
on duplicate key update company_id = values(company_id), name=values(name), employee_nums=values(employee_nums), 
registered_date=values(registered_date); % (company_id, name, employee_name, "'{}'".format(registered_date) if registred_date else "NULL")
insert NULL into mysql的更多相关文章
- ORA-01400: cannot insert NULL into
		
Error text: ORA-01400: cannot insert NULL into when insert into view, NULL value handler in trigger. ...
 - [转]一次Delete&Insert引发的Mysql死锁
		
近日遇到一个比较奇怪的deadlock错误, 错误详情: Deadlock found when trying to get lock; try restarting transaction; nes ...
 - Using INSERT IGNORE with MySQL to prevent duplicate key errors
		
An error will occur when inserting a new record in MySQL if the primary key specified in the insert ...
 - mybatis学习 -每天一记 mybatis  insert null 报错
		
mybatis 插入数据,model的属性存在null,插入报错 在使用mybatis 进行insert时,如果字段值存在null的情况,会出现插入失败的情况,解决方案: 如果使用spring boo ...
 - null在mysql中的不同表现
		
在mysql中count(*)和count(id)具有不同的表现,其最大的影响是在我们进行联表的时候,如,我们现在要查询一个文章的评论数量,使用左连接查询,具体的sql语句如下: SELECT a.* ...
 - 【原创】sql:慎用【数字字段1 - 数字字段2】这样的sql(10-null = null)mysql
		
如果只有一个表的情况下 a表: id num1,num2 1 10 5 2 10 0 3 20 0 select id, num1,num2,num1 - num2 AS subNum from a; ...
 - django insert data into mysql
		
#!/usr/bin/python # -*- coding:utf-8 -*- # @filename: search # @author:wwx399777 wuweiji # @date: 20 ...
 - 2020-04-06:insert语句在mysql里经历了什么?
		
1.会话状态转换为update 2.激活事物状态由 not_active 变为 active 3.查找定位数据 4.进行乐观插入 记录insert的undo记录记录undo的redo log 入red ...
 - 如何查找一个为NULL的MYSQL字段
		
前言:在做这个题目 https://www.cnblogs.com/pipihao/p/13786304.html 因为之前 我好像没有接触过什么 为NULL字段的查询,细节不小 WHERE 字段 I ...
 
随机推荐
- socket、tcp/ip协议、udp协议
			
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
 - JVM内存模型(一)
			
主要澄清之前对JVM内存模型的一些误区: JMV内存主要分为5块:方法区(Method Area),堆区(Heap),虚拟机栈(VM stack),本地方法栈(Native Method stack) ...
 - golang  init函数
			
init函数有一下几点特性: init函数在main执行之前,自动被调用执行的,不能显示调用 每个包的init函数在包被引用时,自动被调用 每个包可以有多个init函数 同一个文件中可定义多个init ...
 - phper必知必会之数组指针(四)
			
数组指针 1.介绍几个数组指针的函数 current() - 返回数组中的当前单元 end() - 将数组的内部指针指向最后一个单元 prev() - 将数组的内部指针倒回一位 reset() - 将 ...
 - oracle锁表查询
			
ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码代码如下: --锁表查 ...
 - phonegap 2.9 IOS Xcode 搭建环境
			
一:下载phoneGap2.9和安装Xcode5(目前最新版) 选择2.9是因为3.0以上坑爹版本编译神马的要在有网络情况. 二: 下载phonegap后解压到你的指定文件夹中,解压后找到create ...
 - unittest框架模版 (含智能执行类下面所有用例并出报告)
			
基础框架一: import unittest class denglu(unittest.TestCase): def setUp(self): #每次执行测试用例前操作步骤 self.verific ...
 - 廖雪峰Java1-2程序基础-5浮点数运算
			
1.浮点数运算的特点 很多浮点数无法精确表示 计算有误差 整型可以自动提升到浮点型 如0.1用二进制表示会是一个无限循环的小数.计算机不可能在有限内存中表示一个无限小数.因此浮点数不能精确表示.也造成 ...
 - nginx 限流配置
			
上配置 http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr ...
 - 团队作业(二):ASB
			
团队作业(二):团队选题 题目四:基于Android的文件加密系统 系统名称:ASB 一.引言 1.1编写目的 (1)学习并熟悉掌握AES/DES加密算法的原理以及算法 (2)学习并熟悉Android ...