@null_object

Почему возникает warning при использовании SQLAlchemy + PyMySQL?

Здравствуйте ! Установил SQLAlchemy, PyMySQL, Flask-SQLAlchemy, Flask-Migrate.

Когда делаю миграцию, либо создаю новую запись мне выкидывает такое предупреждение:
domains\myapp\venv\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xCD\\xEE\\xE2\\xEE\\xF1\\xE8...' for column 'VARIABLE_VALUE' at row 512")
  result = self._query(query)
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.env] No changes in schema detected.


Конфиг такой:
# Database
DB_USER = "user"
DB_PASS = "password"
DB_HOST = "localhost"
DB_PORT = 3306
DB_DATABASE = "app"
DB_CHARSET = "utf8mb4"

# SQLAlchemy
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_DATABASE}?charset={DB_CHARSET}"
SQLALCHEMY_TRACK_MODIFICATIONS = False


Создал модель:
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    full_name = db.Column(db.String(150), index=True)
    status = db.Column(db.Enum(UserStatus), index=True)
    card_number = db.Column(db.String(16), index=True)
    hash = db.Column(db.String(65))
    icon = db.Column(db.String(7))
    card_serial = db.Column(db.String(8))
    token = db.Column(db.String(33), index=True)
    time = db.Column(db.DateTime, default=dt.utcnow)

    def __repr__(self):
        return f"<User {self.full_name}>"


Вроде что-то с кодировкой, но у меня везде стоит utf8mb4. Залез в PyMySQL и сделал дамп сгенерированного SQL:
SET NAMES utf8mb4
SHOW VARIABLES LIKE 'sql_mode'
SHOW VARIABLES LIKE 'lower_case_table_names'
SELECT VERSION()
SELECT DATABASE()
SELECT @@transaction_isolation
show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin AS anon_1
SET NAMES utf8mb4
SHOW VARIABLES LIKE 'lower_case_table_names'
SELECT VERSION()
SELECT DATABASE()
SELECT @@transaction_isolation
show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
SELECT CAST('test collated returns' AS CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin AS anon_1
SET NAMES utf8mb4


Так-то оно работает: миграции создаются, данные пишутся, но хочу исправить эту проблему. В чем может быть проблема ?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы