Почему операция select должна быть зафиксирована после вызова apscheduler или заблокировать следующую модификацию? - PullRequest
1 голос
/ 14 апреля 2020
import mysql.connector
from apscheduler.schedulers.background import BackgroundScheduler

def progress_bar():
    pass

def test():
    conn = mysql.connector.connect(user='root', password='123456', database='test', auth_plugin='mysql_native_password')
    cursor = conn.cursor()

    cursor.execute('drop table if exists main')
    conn.commit()
    cursor.execute('create table main (mid int)')
    conn.commit()
    cursor.execute('insert into main values (1)')
    conn.commit()

    sched = BackgroundScheduler()
    job = sched.add_job(progress_bar, 'interval', seconds=1)

    cursor.execute('select * from main')
    print(cursor.fetchall())
    #conn.commit()


test()

Перед запуском кода необходимо создать пустую схему 'test' в mysql

Я дважды запускаю код на блокноте jupyter, выбор в первый раз вернул результат, но все же выполняется, поэтому он блокирует операцию удаления во второй раз

После многих попыток код может нормально работать в следующих ситуациях:

  1. удалить 2 вызова apscheduler
  2. не используйте функцию 'test', запустите строки в 'test' напрямую
  3. добавьте 'conn.commit ()' после выборки 'select * from main'
  4. беги по моему возвышенному тексту
...