Использование в Python.(5)

Python

«Это пятый день моего участия в ноябрьском испытании обновлений. Подробную информацию об этом событии см.:Вызов последнего обновления 2021 г."

В параметрах 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 будут выполнены, либо ни один из них не будет выполнен. Транзакции используются для управления операторами вставки, обновления и удаления.

Существует два основных метода обработки транзакций MYSQL:

1. Используйте BEGIN, ROLLBACK, COMMIT для реализации, BEGIN запускает транзакцию, ROLLBACK откатывает транзакцию, а COMMIT подтверждает транзакцию.

2. Используйте SET напрямую, чтобы изменить режим автоматической фиксации MySQL: SET AUTOCOMMIT=0 отключает автоматическую фиксацию, а SET AUTOCOMMIT=1 включает автоматическую фиксацию.

При настройках командной строки MySQL по умолчанию транзакции фиксируются автоматически, то есть операция COMMIT будет выполняться сразу после выполнения оператора SQL. Поэтому, чтобы явно начать транзакцию, вы должны использовать команду 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()