在 peewee 中设置严格 sql 模式

Set strict sql mode in peewee

我想在我的 mySQL 数据库中强制使用 ENUM 约束。为此,建议我使用 "strict" sql 模式。在交互式提示中,可以使用以下之一进行设置:

SET GLOBAL sql_mode = 'STRICT_ALL_TABLES';
SET SESSION sql_mode = 'STRICT_ALL_TABLES';

或者在服务器启动时使用:

 --sql-mode="STRICT_ALL_TABLES"

或在 my.cnf 中为:

sql-mode="STRICT_ALL_TABLES"

peewee有没有办法做这样的事情?也许通过扩展 Database class?或者在查询中注入原始 sql?

你最好的选择可能是继承 MySQLDatabase 并覆盖 _connect() 方法,例如

class StrictMySQLDatabase(MySQLDatabase):
    def _connect(self, database, **kwargs):
        conn = super(StrictMySQLDatabase, self)._connect(database, **kwargs)
        cursor = conn.cursor()
        cursor.execute("SET SESSION sql_mode = 'STRICT_ALL_TABLES';")
        return conn