我试图importlib.import_module
在Python 2.7.2中使用并遇到奇怪的错误.
考虑以下目录结构:
a | + - __init__.py - b | + - __init__.py - c.py
a/b/__init__.py
具有以下代码:
import importlib mod = importlib.import_module("c")
(在实际代码中"c"
有一个名字.)
试着import a.b
,产生以下错误:
>>> import a.b Traceback (most recent call last): File "", line 1, in File "a/b/__init__.py", line 3, in mod = importlib.import_module("c") File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named c
我错过了什么?
谢谢!
我们使用 django 迁移 (django v1.7+) 更改了我们的数据库。数据库中存在的数据不再有效。
基本上我想通过在单元测试中测试迁移,构建迁移前数据库,添加一些数据,应用迁移,然后确认一切顺利。
怎么做:
加载单元测试时阻止新的迁移
我找到了一些关于覆盖的东西,settings.MIGRATION_MODULES
但不知道如何使用它。当我检查时,executor.loader.applied_migrations
它仍然列出了所有内容。我可以阻止新迁移的唯一方法是实际删除文件;不是我可以使用的解决方案。
在 unittest 数据库中创建一条记录(使用旧模型)
如果我们可以阻止迁移,那么这应该非常简单。 myModel.object.create(...)
应用迁移
我想我现在可能可以解决这个问题,因为我已经找到了test_executor:设置一个指向迁移文件的计划并执行它?嗯,对吗?有任何代码:-D
确认数据库中的旧数据现在与新模型匹配
同样,我希望这应该很简单:只需获取迁移前创建的实例并确认它已以所有正确的方式更改。
所以挑战真的只是解决如何防止单元测试应用最新的迁移脚本,然后在我们准备好时应用它?
也许我有错误的方法?我是否应该创建装置,并在最后确认它们都很好?是在应用迁移之前还是在它们全部完成之后加载夹具?
通过使用MigrationExecutor
和挑选特定的迁移,.migrate
我已经能够,也许?,将它回滚到特定状态,然后一个一个地向前滚动。但这令人怀疑;由于缺乏实际的 ALTER TABLE 指令,目前正在追逐 sqlite 捏造。陪审团还在外面。