我在SQLAlchemy 1.0.9中使用对象关系映射器(ORM)作为PyQt4编写的应用程序接口的主干。我的目标是使用PyQt emit / signal / slot系统(ref 1)将模型对象中的更改传递给接口。但是,这要求ORM类派生自QObject类。我想我找到了一种方法:使用pyqtWrapperType元类并将其传递给构造函数declarative_base(ref 2),这样Base就是从它派生的。
我的问题:当运行init_db.py(见下文)时,数据库中没有创建表,即使代码没有给出任何错误。然而,当我运行此代码而不使用pyqtWrapperType作为元类时,它工作得很好。我现在遇到两个问题:(1)我做错了什么,(2)我怎么解决这个问题?我希望你能给我一些建议。
projectmodels.py:
from sqlalchemy.ext.declarative import declarative_base
from PyQt4.QtCore import QObject, pyqtWrapperType
Base = declarative_base(metaclass = pyqtWrapperType)
class Project(Base):
__tablename__ = 'Projects'
ProjectID = Column(Integer, primary_key=True)
Name = Column(String(250), nullable=False)
YearZero = Column(Integer)
init_db.py:
import projectmodels
import sqlalchemy as sqa
engine = sqa.create_engine('sqlite:///' + some_filepath_to_sqlite_db, echo = True)
projectmodels.Base.metadata.create_all(engine)