Неверный порядковый номер пакета при подключении PyMySQL к MySQL, работающему на бродяге

Я занимаюсь локальной разработкой приложения Flask с MySQL, настроенным для работы на Vagrant. Используя PyMySQL с SQLAlchemy, я подключаюсь к mysql+pymysql://root:<password>@127.0.0.1:2222/<my_db>. Когда я запускаю свое приложение, я получаю следующую ошибку:

sqlalchemy.exc.InternalError: (InternalError) Packet sequence number wrong - got 42 expected 0 None None

Судя по некоторым проблемам в репозитории PyMySQL на GitHub, это связано с многопоточностью. Насколько я знаю, я ничего не сделал специально для многопоточности моего приложения, поэтому я предполагаю, что это происходит автоматически с помощью Flask или SQLAlchemy.

FWIW Мне удалось настроить Sequel Pro для SSH в MySQL, работающем на Vagrant, используя ту же информацию, что и с mysql+pysql://. Используя сокращенный тестовый пример, я запустил код, который нашел в этом ответе SO, и все равно столкнулся с той же ошибкой.

Вот мой бродячий файл:

Vagrant.configure("2") do |config|
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"
  config.vm.network :forwarded_port, guest: 3306, host: 3306
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network "private_network", ip: "33.33.33.10", type: "dhcp", auto_config: false

end

Вот мой файл bootstrap.sh:

#!/usr/bin/env bash

sudo apt-get update
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password p<password>'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password p<password>'
sudo apt-get update
sudo apt-get -y install mysql-server-5.5

if [ ! -f /var/log/databasesetup ];
then
    sed -i "s/^bind-address/#bind-address/" /etc/mysql/my.cnf
    echo "GRANT ALL ON *.* TO 'root'@'{99.99.99.99}' IDENTIFIED BY '<password>' WITH GRANT OPTION" | mysql -uroot -p<password>
    echo "FLUSH PRIVILEGES" | mysql -uroot -p<password>
    echo "CREATE DATABASE my_db" | mysql -uroot -p<password>

    touch /var/log/databasesetup

    if [ -f /vagrant/data/initial.sql ];
    then
        mysql -uroot -p<password> my_db < /vagrant/data/initial.sql
    fi
    sudo /etc/init.d/mysql restart
fi

if [ ! -h /var/www ];
then

    rm -rf /var/www sudo
    ln -s /vagrant/public /var/www

    a2enmod rewrite

    sed -i '/AllowOverride None/c AllowOverride All' /etc/apache2/sites-available/default

    service apache2 restart
fi

Вот мой файл app/__init.py__:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:<password>@127.0.0.1:2222/my_db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

admin = User('admin', '[email protected]')

db.create_all() # In case user table doesn't exists already. Else remove it.    

db.session.add(admin)

db.session.commit() # This is needed to write the changes to database

User.query.all()

User.query.filter_by(username='admin').first()

Мой run.py файл:

#!/usr/bin/env python

from app import app

app.run(debug=True)

Основываясь на ошибке, которую я получаю, я правильно подключаюсь, но сталкиваюсь с проблемой из-за многопоточности. Что мне нужно изменить, чтобы заставить PyMySQL работать с этой настройкой?


person Spencer Carnage    schedule 08.01.2018    source источник