我试图弄清楚如何将SQLAlchemy类分布到多个文件中,而我可以终生不搞清楚如何做到这一点。我是SQLAlchemy的新手,如果这个问题不重要,请原谅我。
在 各自的文件中 考虑以下三个类:
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")
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"))
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"))
然后说我们有一个 main.py之类的 东西:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref, sessionmaker
Base = declarative_base()
import A
import B
import C
engine = create_engine("sqlite:///test.db")
Base.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()
a = A.A()
b1 = B.B()
b2 = B.B()
c1 = C.C()
c2 = C.C()
a.Bs.append(b1)
a.Bs.append(b2)
a.Cs.append(c1)
a.Cs.append(c2)
session.add(a)
session.commit()
上面给出了错误:
sqlalchemy.exc.NoReferencedTableError: Foreign key assocated with column 'C.A_id' could not find table 'A' with which to generate a foreign key to target column 'id'
如何在这些文件之间共享声明式库?
考虑到我可能 还会 在上面 放置 诸如 Pylons 或 Turbogears之 类的东西,完成此任务的“正确”方法是什么?
编辑10-03-2011
我从Pyramids框架中找到了这个描述,该描述描述了问题,更重要的是 验证
了这是一个实际问题,而不仅仅是(只是)我那困惑的自我。希望它可以帮助其他敢于走这条危险道路的人:)
解决您的问题的最简单方法是Base
取出导入的模块A
,B
然后C
;中断循环导入。
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
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")
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"))
from sqlalchemy import *
from base import Base
class C(Base):
__tablename__ = "C"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
from sqlalchemy import create_engine
from sqlalchemy.orm import relationship, backref, sessionmaker
import base
import a
import b
import c
engine = create_engine("sqlite:///:memory:")
base.Base.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()
a1 = a.A()
b1 = b.B()
b2 = b.B()
c1 = c.C()
c2 = c.C()
a1.Bs.append(b1)
a1.Bs.append(b2)
a1.Cs.append(c1)
a1.Cs.append(c2)
session.add(a1)
session.commit()
适用于我的机器:
$ python main.py ; echo $?
0
入门 一个高级视图和设置。 Overview | Installation Guide | Frequently Asked Questions | Migration from 1.3 | Glossary | Error Messages | Changelog catalog 教程 SQLAlchemy 1.4 / 2.0 Transitional sqlalchemy2.0作为sqlalc
SQLAlchemy 是 Python 编程语言下的一款开源软件。提供了 SQL 工具包及对象关系映射(ORM)工具,使用 MIT 许可证发行。
我需要在浏览器中打开一个本地html文件。javascript运行良好,但ajax停止工作,XMLHttpRequest会出现交叉原点错误。有没有办法从本地目录运行ajax。对我来说,它只从本地文件运行是必要的。 谢谢
Flask-SQLAlchemy 是一个为您的 Flask 应用增加 SQLAlchemy 支持的扩展。它需要 SQLAlchemy 0.6 或者更高的版本。它致力于简化在 Flask 中 SQLAlchemy 的使用,提供了有用的默认值和额外的助手来更简单地完成常见任务。 Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展。有关完整的指南,请参
问题内容: 我似乎无法从Yahoo Finance获得CSV股票文件来“成功”加载。我已经测试了来自其他问题的不同回调和建议,但它们似乎都不起作用- 大多数都没有输出任何内容。 这段代码会发出警报(``错误’‘回调),但是可以在网络面板中成功看到CSV文件。网络面板中的数据按预期显示为“ XOM,Exxon Mobile Corpo”(因此确实已加载)。 我想真正的问题是如何获取我知道的数据。我现
6.1. 文件系统跨越 无论你用什么方法使用文件,你都要在某个地方指定文件名。在很多情况下,文件名会作为fopen()函数的一个参数,同时其它函数会调用它返回的句柄: <?php $handle = fopen('/path/to/myfile.txt', 'r'); ?> 当你把被污染数据作为文件名的一部分时,漏洞就产生了: <?php $handle = fopen("/path/to/{$_