python 插入Null值数据到Postgresql的操作
程序员文章站
2022-07-03 19:31:29
数据库中最好插入null值。在python中,暂时没找到通过sql语句的方式插入null值。推荐使用*的方法def insert_sample_data(self, values): # added...
数据库中最好插入null值。
在python中,暂时没找到通过sql语句的方式插入null值。
推荐使用*的方法
def insert_sample_data(self, values): # added self since you are referencing it below with self.con.cursor() as cur: sql = "insert into sampletable values (%s, %s, %s)" # use %s for parameters cur.executemany(sql, values) # pass the list of tuples directly self.con.commit() list1 = [(1100, 'abc', '{"1209": "y", "1210": "y"}'), (1100, 'abc', none)] self.insert_sample_data(list1) # pass the list directly
补充:python连接数据库插入数据库数据所碰到的坑
python中插入数据时执行后,没有报任何错误,但数据库中并没有出现新添加的数据
原因:
缺少提交操作。
解决方案:
python操作数据库时,如果对数据表进行修改/删除/添加等控制操作,系统会将操作保存在内存,只有执行commit(),才会将操作提交到数据库。
但是总有你想不到的坑代码如下:
import pymysql class connection: def __init__(self): self.host = 'localhost' self.user = 'nameit' self.password = 'yes' self.port = 3306 self.db = 'xomai' def connection(self): db = pymysql.connect(host=self.host, user=self.user, password=self.password, port=self.port, db=self.db) cur = db.cursor() return db, cur def create_table(self, cur): sql = """create table `activity_feedback` ( `id` bigint(20) not null auto_increment, `inst_id` bigint(20) default null comment 'id', `broadcast_id` bigint(20) default null comment '你好', `student_id` bigint(20) default null comment '学生id', `content` varchar(1024) default null comment '学员内容', `comment` varchar(255) default null comment '注释', `gmt_create` datetime default null, `gmt_modify` datetime default null, primary key (`id`), key `activity_feedback_student_id_index` (`student_id`) ) engine = innodb auto_increment = 1050 default charset = utf8mb4 comment = '学员表'""" cur.execute(sql) def insert(self, id, inst_id, broadcast_id, student_id, content, comment, gmt_create, gmt_modify): sql = """insert into `activity_feedback` ( `id`, `inst_id`, `broadcast_id`, `student_id`, `content`, `comment`, `gmt_create`, `gmt_modify`) values ('{}','{}','{}','{}','{}','{}','{}','{}')""".format(id, inst_id, broadcast_id, student_id, content, comment, gmt_create, gmt_modify) try: self.connection()[1].execute(sql) self.connection()[0].commit() except: self.connection()[0].rollback() if __name__ == '__main__': conn = connection() conn.insert(123, 123, 324, 3451, 'ajdf', 'sdfs', '2013-2-5', '2014-3-4')
咋一看好像也有commit呀,怎么一直在数据库没有,再仔细看看
try: self.connection()[1].execute(sql) self.connection()[0].commit() except: self.connection()[0].rollback()
connection()调用方法方法返回的对象是同一个吗?
并不是,心累,搞了半天,只怪自己还太嫩。
正确写法:
try: cons = self.connection() cons[1].execute(sql) cons[0].commit() cons[0].close() except: cons[0].rollback()
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
推荐阅读
-
python读取json文件并将数据插入到mongodb的方法
-
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
-
Python操作sqlite3快速、安全插入数据(防注入)的实例
-
88秒插入1000万条数据到MySQL数据库表的操作方法
-
python中sqllite插入numpy数组到数据库的实现方法
-
Python操作PostgreSql数据库的方法(基本的增删改查)
-
python 插入Null值数据到Postgresql的操作
-
PostgreSQL upsert(插入更新)数据的操作详解
-
数据库MySql python读取插入数据,insert对那些类型加单引号,表单自己参考自己(外键),空值和NULL
-
python消费kafka数据批量插入到es的方法