不创建跨文件,SQL表的SQLAlchemy类

时间:2018-03-08 17:06:36

标签: python python-3.x sqlalchemy

我正在尝试使用SQLAlchemy创建一个应用程序。只要我只有一个类有一个文件,它就可以正常工作。现在我想在不同的文件中有多个类/表。我偶然发现了this问题,并尝试按照那里的建议进行操作:我现在有三个文件

base.py

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

blind.py

from sqlalchemy import Column, String
from .base import Base


class Blind(Base):
    __tablename__ = 'blinds'

    blind = Column(String)
    data_processor_uuid = Column(String, primary_key=True)
    data_source_uuid = Column(String)
    timestamp = Column(String, primary_key=True)

和data.py

from sqlalchemy import Column, Integer, String, Float
from .base import Base


class Datum(Base):
    __tablename__ = 'data'

    data_source_uuid = Column(Integer, primary_key=True)
    sensor_type = Column(String)
    timestamp = Column(String, primary_key=True)
    value = Column(Float)

我现在想要使用

在db_setup.py中初始化数据库
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from .base import Base


engine = create_engine('sqlite:///test.db', echo=True)
Base.metadata.bind = engine
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()


def get_db_session():
    return session

但是,它不会按预期在数据库中创建表。当我尝试在表格中插入某些内容时,我收到一条错误消息,表示"表格不存在"。有人能告诉我这里我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

问题在于我没有在任何地方导入Blinds和Datum的类定义,所以它们没有被评估!在我将它们分成不同的文件之前,我已将它们导入到Base。感谢@IljaEverilä的回答!