我的模型为各种列使用了几枚枚举,使用SQLAlchemy的create_all()方法在PostgreSQL中正常工作,但它不适用于SQLite,它只是停滞不前。在SQLite中枚举
这个问题似乎与创建Enum的,据我可以告诉SQLite不支持这些,但根据SQLAlchemy的文档应该不会造成问题。当我尝试在sqlite内存数据库上创建create_all()时,它只是停滞不前,即使使用echo = True,也不会显示输出。
我尝试下面的代码来演示该问题:
from sqlalchemy import create_engine, Enum
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
e = Enum('foo', 'bar', metadata=Base.metadata)
engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(bind=engine)
当我运行此脚本它没有显示出任何输出,它只是个摊位。 Python使用100%的CPU,脚本永远不会结束,直到我按Ctrl-C它。
当我在我的实际模式上尝试create_all()时,它确实会回显一些PRAGMA命令,试图确定表是否存在,但是它会停止创建枚举。我试图从模型定义中删除代码,直到它工作得很好,这是我发现它是Enums的时候。
我试着在SQL 3.4上用SQLAlchemy 0.9.6使用SQLite 3.7.13运行它。
我相信这是一个将元数据传递给'Enum'的错误。从你的真实代码中删除kwarg。 – Eevee
你似乎是对的,我删除了元数据kwargs,它的工作原理。如果你把它写成答案,我可以投票赞成。 – Blubber
当一个图书馆锁定紧张,这是一个错误。直接进入[bug跟踪器](https://bitbucket.org/zzzeek/sqlalchemy)。 – zzzeek