sqlalchemy:同一类的多个基础

时间:2012-05-10 22:42:42

标签: python sqlalchemy

这可能非常简单,但仍然拿起sqlalchemy,似乎无法找到答案。我有一个基本模块sometable.py

import config
class SomeTable(config.Base):
    __tablename__ = 'bla'
    def __init__(self, name):
        self.name = name

现在,我想在这个模块上编写测试:基本上添加几个测试行,使用SomeTable的其他函数进行一些计算,并检查结果。但我不想在我的主数据库中进行这些操作。如何将不同的Base对象传递给sometable模块中定义的类?或者有更好的方法来实现这一目标吗?

e.g。我的test_sometable.py目前看起来像这样:

import sometable, config
class TestSomeTable(unittest.TestCase):

    def setUp(self):
        engine = create_engine('sqlite:///:memory:')
        self.Base = declarative_base(config.Base.metadata, engine)

    def test_some_functionality(self):
        tbl = sometable.SomeTable('name1')
        # if i create a session and add a row here, 
        # it will add it to my main database, rather than the in-memory one

1 个答案:

答案 0 :(得分:1)

SomeTable使用config.Base作为基础,在测试类中定义新的Base并不重要。您的实体如何知道它应该是另一个基础?

我认为如果您首先导入config,然后将config.Base替换为您要使用的基础,并且仅在导入sometable之后,它应该有效。否则,在运行单元测试时,您必须找到另一种方法来使用测试配置而不是生产配置。