相关疑难解决方法(0)

SQLAlchemy无法找到类名

简化,我有以下类结构(在单个文件中):

Base = declarative_base()

class Item(Base):
    __tablename__ = 'item'
    id = Column(BigInteger, primary_key=True)
    # ... skip other attrs ...

 class Auction(Base):
     __tablename__ = 'auction'
     id = Column(BigInteger, primary_key=True)
     # ... skipped ...
     item_id = Column('item', BigInteger, ForeignKey('item.id'))

     item = relationship('Item', backref='auctions')
Run Code Online (Sandbox Code Playgroud)

我从这里得到以下错误:

sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
    'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
    class name, consider adding this relationship() to the Auction class after
    both dependent classes have been …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy relationships pyramid

27
推荐指数
5
解决办法
1万
查看次数

导入处理/模块从python2更改为python3?

我试图遵循上一个与SQLAlchemy相关的问题中显示的设计模式,并打算在多个文件之间共享一个公共Base实例.完全相同的代码适用于python2和python3.

但是,当我在一个模块(称为模型)中移动文件a.py,b.py,c.py和base.py并添加必要的__init__.py文件时,它继续在python2上工作,但随后产生错误在python3上(详情如下).

我有以下文件:

模型/ base.py

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)

模型/ a.py

from sqlalchemy import *
from base import Base
from sqlalchemy.orm import relationship

class A(Base):
    __tablename__ = "A"
    id  = Column(Integer, primary_key=True)
    Bs  = relationship("B", backref="A.id")
    Cs  = relationship("C", backref="A.id")
Run Code Online (Sandbox Code Playgroud)

模型/ b.py

from sqlalchemy import *
from base import Base

class B(Base):
    __tablename__ = "B"
    id    = Column(Integer, primary_key=True)
    A_id  = Column(Integer, ForeignKey("A.id"))
Run Code Online (Sandbox Code Playgroud)

模型/ c.py

from sqlalchemy import *
from base import Base …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy python-3.x

6
推荐指数
1
解决办法
1549
查看次数

sqlalchemy 嵌套继承/多态关系

我有一个看起来像这样的树,通过多态继承反映:

      A
  /   |   \
  B   C   D
Run Code Online (Sandbox Code Playgroud)

这很好用,例如:

class BaseModel(db.Model):     # Table A in diagram
    __tablename__ = "entities"

    id = db.Column(db.BigInteger, primary_key=True, nullable=False, server_default=func.nextval('guid_seq'))
    type_id = db.Column(db.SmallInteger, db.ForeignKey(EntityTypesModel.id))

    __mapper_args__ = {
        'polymorphic_identity':'entity',
        'polymorphic_on':type_id,
        'with_polymorphic':'*'
    }

class BrandModel(BaseModel):   # Table B, C, D in diagram
    __tablename__ = 'brands'

    id = db.Column(db.BigInteger, db.ForeignKey(StufffModel.id), primary_key=True, nullable=False)
    name = db.Column(db.String, nullable=False)

    __mapper_args__ = {
        'polymorphic_identity':ET_BRAND,
    }
Run Code Online (Sandbox Code Playgroud)

问题是我需要反映更像这样的东西:

              A
          /   |   \
          B   C   D
                /   \
                E    F
Run Code Online (Sandbox Code Playgroud)

其中 D 不仅是 A 的多态孩子,也是 …

python sqlalchemy

4
推荐指数
1
解决办法
1878
查看次数

标签 统计

python ×3

sqlalchemy ×3

pyramid ×1

python-3.x ×1

relationships ×1