Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy-多个类,相同的表_Python_Database_Class_Object_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy-多个类,相同的表

Python SQLAlchemy-多个类,相同的表,python,database,class,object,sqlalchemy,Python,Database,Class,Object,Sqlalchemy,现在,我一直在寻找这个答案,但似乎找不到,因为所有内容都指向联接表继承,我理解它,但不想使用它。我希望在SQLAlchemy中创建多个表结构相同的类,只是类名和数据库表名不同。我有意地将这些表分开,而不是使用鉴别器,因为我希望这些表能够扩展到非常大的尺寸。随着时间的推移,表模式也可能会慢慢分化,一些字段会添加到一个而不是另一个字段中 我知道下面的代码不起作用,因为SQLAlchemy试图为联接表继承找到一个外键,而不是使它们成为独立的表,但这基本上就是我想要的。我已经看过这些文档了,但还没有找到

现在,我一直在寻找这个答案,但似乎找不到,因为所有内容都指向联接表继承,我理解它,但不想使用它。我希望在SQLAlchemy中创建多个表结构相同的类,只是类名和数据库表名不同。我有意地将这些表分开,而不是使用鉴别器,因为我希望这些表能够扩展到非常大的尺寸。随着时间的推移,表模式也可能会慢慢分化,一些字段会添加到一个而不是另一个字段中

我知道下面的代码不起作用,因为SQLAlchemy试图为联接表继承找到一个外键,而不是使它们成为独立的表,但这基本上就是我想要的。我已经看过这些文档了,但还没有找到正确实施的方法。有没有一种方法(或多种方法)可以做到这一点

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class HDD(Base):
    """Class representing a hard drive."""

    __tablename__ = 'HDDs'

    _id = Column(
        Integer,
        doc="Auto-incrementing primary key",
        name="id",
        primary_key=True)
    manufacturer = Column(
        String(40),
        doc="Hard drive manufacturer.")
    ...

class SDD(HDD):
    __tablename__ = 'SSDs'
    ...

这看起来像是具体的表继承,正如SQLAlchemy文档的映射类继承层次结构一章中所讨论的那样。

使用
\uuuuuu abstract\uuu=True
在基类上不使用
\uuuuuu tablename\uuuuu
,并从中继承

class HDD(Base):
    __abstract__ = True
    _id = ...

class SDD(HDD):
    __tablename__ = 'SSDs'

class SSD2(HDD):
    __tablename = 'SSDs2'

在freenode上的#sqlalchemy的inklesspen的帮助下,我最终实现了这一点。(谢谢!)

下面的子类继承:

class HDD(ComponentMixin, ConcreteBase, Base):
    """Class representing a hard drive."""

    __tablename__ = 'HDDs'

    __mapper_args__ = {
        'polymorphic_identity': 'hdd',
        'concrete': True}

我还没有尝试过这种方法(我的解决方案见下文),但我可能会在将来尝试一下!我也试过了,我很喜欢!非常干净!感谢您的帮助,包括通过IRC。我在上面提到你是为了表示感谢。:)SDD仍然是HDD的一个子类,还是mixin的一个子类。。。i、 e.
SDD类(HDD):
SDD类(组件混合、混凝土底座、底座):
?更完整的实施将有所帮助。例如,
\u server\u id(self):
是如何实现的?它是否返回列对象?e、 g.
列(整数、ForeignKey('server.id'))
或类似的东西?
class HDD(ComponentMixin, ConcreteBase, Base):
    """Class representing a hard drive."""

    __tablename__ = 'HDDs'

    __mapper_args__ = {
        'polymorphic_identity': 'hdd',
        'concrete': True}