相关疑难解决方法(0)

跨文件的SQLAlchemy类

我正在试图弄清楚如何将SQLAlchemy类分布在几个文件中,而我可以为生活找不到如何做到这一点.我对SQLAlchemy很新,所以如果这个问题很简单,请原谅我.

每个自己的文件中考虑这3个类:

A.py:

from sqlalchemy import *
from main import Base

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 main 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 main import Base

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

然后说我们有一个像这样的main.py:

from sqlalchemy import …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

68
推荐指数
3
解决办法
2万
查看次数

SQLAlchemy声明性一对多未定义错误

我正在尝试使用SQLAlchemy的声明性ORM来定义如何定义一对多关系,并试图让示例工作,但我收到一个错误,我的子类无法找到(当然,因为它稍后宣布...)

InvalidRequestError:初始化映射器Mapper | Parent | parent时,表达式"Child"无法找到名称("未定义名称'Child').如果这是类名,请考虑在定义了两个依赖类之后将此关系()添加到类中.

但是如何定义这个,没有错误?

代码:

from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from dev.historyMeta import VersionedMeta, VersionedListener

global engine, Base, Session
engine = create_engine('mysql+mysqldb://user:pass@localhost:3306/testdb', pool_recycle=3600)
Base = declarative_base(bind=engine, metaclass=VersionedMeta)
Session = sessionmaker(extension=VersionedListener())


class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child", backref="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

Base.metadata.create_all()
Run Code Online (Sandbox Code Playgroud)

python database sqlalchemy

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

标签 统计

python ×2

sqlalchemy ×2

database ×1