【问题标题】:SQLAlchemy classes across files, tables are not created跨文件的 SQLAlchemy 类,不创建表
【发布时间】:2018-03-08 17:06:35
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: python python-3.x sqlalchemy


    【解决方案1】:

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

    【讨论】:

    • 你能提供完整的工作代码吗?我有类似的设置,但在db_setup.py 中执行类似from blin.py import Blind 的操作不会创建表。
    猜你喜欢
    • 2023-03-23
    • 2019-06-04
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2016-08-13
    • 2014-07-09
    相关资源
    最近更新 更多