|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 CH10 于 2020-9-25 11:39 编辑
找到答案了:
aiomysql.connect() 的参数中有一个 autocommit 参数,默认为 False, 你可以把它设置为 True, 这样就不需要手动调用 connection.commit() 了。
每次执行增删改都要加一句.commit()太麻烦了,用参数改成自动舒服
- conn = await aiomysql.connect(
- host='127.0.0.1',
- port=3306,
- user='root',
- password='password',
- db='test',
- autocommit=True,
- loop=loop)
- g_pool = await aiomysql.create_pool(
- host='127.0.0.1',
- port=3306,
- user='root',
- password='password',
- db='test',
- autocommit=True,
- minsize=1,
- maxsize=10,
- loop=loop)
复制代码
为什么查询数据库的时候,cursor.execute(sql)执行sql语句,直接就有结果,不需要db.commit()
而增删改,都需要加db.commit()这一句,数据库才会执行增删改操作,不加db.commit()这一句程序不会报错但数据库就是不会进行操作,看了各类教程都没有关于这一点的解释
刚找到了以下下资料
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
更新一下问题:
数据库那里默认好像也是自动提交的啊,为什么还需要db.commit()语句,python和直接在 MySQL 命令行下执行为什么不一样???
- Database changed
- MariaDB [test]> show variables like '%autocommit%';
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | autocommit | ON |
- +---------------+-------+
- 1 row in set (0.00 sec)
复制代码
python 查询数据库
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import MySQLdb
- # 打开数据库连接
- db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )
- # 使用cursor()方法获取操作游标
- cursor = db.cursor()
- # SQL 查询语句
- sql = "SELECT * FROM EMPLOYEE \
- WHERE INCOME > %s" % (1000)
- try:
- # 执行SQL语句
- cursor.execute(sql)
- # 获取所有记录列表
- results = cursor.fetchall()
- for row in results:
- fname = row[0]
- lname = row[1]
- age = row[2]
- sex = row[3]
- income = row[4]
- # 打印结果
- print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
- (fname, lname, age, sex, income )
- except:
- print "Error: unable to fecth data"
- # 关闭数据库连接
- db.close()
复制代码
python插入数据库
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import MySQLdb
- # 打开数据库连接
- db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )
- # 使用cursor()方法获取操作游标
- cursor = db.cursor()
- # SQL 插入语句
- sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
- LAST_NAME, AGE, SEX, INCOME)
- VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
- try:
- # 执行sql语句
- cursor.execute(sql)
- # 提交到数据库执行
- db.commit()
- except:
- # Rollback in case there is any error
- db.rollback()
- # 关闭数据库连接
- db.close()
复制代码 |
|