python 插入Null值数据到Postgresql的操作!
数据库中最好插入Null值。
在python中,暂时没找到通过sql语句的方式插入Null值。
推荐使用轮子的方法
definsert_sample_data(self,values):#addedselfsinceyouarereferencingitbelow withself.con.cursor()ascur: sql="insertintosampletablevalues(%s,%s,%s)"#Use%sforparameters cur.executemany(sql,values)#Passthelistoftuplesdirectly self.con.commit() list1=[(1100,'abc','{"1209":"Y","1210":"Y"}'),(1100,'abc',None)] self.insert_sample_data(list1)#passthelistdirectly
补充:python连接数据库插入数据库数据所碰到的坑
Python中插入数据时执行后,没有报任何错误,但数据库中并没有出现新添加的数据
原因:
缺少提交操作。
解决方案:
Python操作数据库时,如果对数据表进行修改/删除/添加等控制操作,系统会将操作保存在内存,只有执行commit(),才会将操作提交到数据库。
但是总有你想不到的坑代码如下:
importpymysql classConnection: def__init__(self): self.host='localhost' self.user='nameit' self.password='YES' self.port=3306 self.db='Xomai' defconnection(self): db=pymysql.connect(host=self.host,user=self.user,password=self.password,port=self.port,db=self.db) cur=db.cursor() returndb,cur defcreate_table(self,cur): sql="""CREATETABLE`activity_feedback`( `id`bigint(20)NOTNULLAUTO_INCREMENT, `inst_id`bigint(20)DEFAULTNULLCOMMENT'ID', `broadcast_id`bigint(20)DEFAULTNULLCOMMENT'你好', `student_id`bigint(20)DEFAULTNULLCOMMENT'学生ID', `content`varchar(1024)DEFAULTNULLCOMMENT'学员内容', `comment`varchar(255)DEFAULTNULLCOMMENT'注释', `gmt_create`datetimeDEFAULTNULL, `gmt_modify`datetimeDEFAULTNULL, PRIMARYKEY(`id`), KEY`activity_feedback_student_id_index`(`student_id`) )ENGINE=InnoDBAUTO_INCREMENT=1050DEFAULTCHARSET=utf8mb4COMMENT='学员表'""" cur.execute(sql) definsert(self,id,inst_id,broadcast_id,student_id,content,comment,gmt_create,gmt_modify): sql="""INSERTINTO`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()
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。