将PyQt4与SQLAlchemy结合使用

时间:2016-01-13 16:26:40

标签: python sqlite orm sqlalchemy pyqt

我在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)  

0 个答案:

没有答案