python连接数据库插入数据库数据所碰到的坑
【摘要】
Python中插入数据时执行后,没有报任何错误,但数据库中并没有出现新添加的数据
原因:缺少提交操作。
解决方案:Python操作数据库时,如果对数据表进行修改/删除/添加等控制操作,系统会将操作保存在内存,只有执行commit(),才会将操作提交到数据库。
但是总有你想不到的坑代码如下:
import pymysql
cla...
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()
文章来源: blog.csdn.net,作者:橙子园,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/Chenftli/article/details/83028207
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)