相关疑难解决方法(0)

如何使用importlib.import_module在Python中导入模块

我试图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

我错过了什么?

谢谢!

python import module python-importlib

57
推荐指数
3
解决办法
8万
查看次数

如何对 Django 数据库迁移进行单元测试?

我们使用 django 迁移 (django v1.7+) 更改了我们的数据库。数据库中存在的数据不再有效。

基本上我想通过在单元测试中测试迁移,构建迁移前数据库,添加一些数据,应用迁移,然后确认一切顺利。

怎么做:

  1. 加载单元测试时阻止新的迁移

    我找到了一些关于覆盖的东西settings.MIGRATION_MODULES但不知道如何使用它。当我检查时,executor.loader.applied_migrations它仍然列出了所有内容。我可以阻止新迁移的唯一方法是实际删除文件;不是我可以使用的解决方案。

  2. 在 unittest 数据库中创建一条记录(使用旧模型)

    如果我们可以阻止迁移,那么这应该非常简单。 myModel.object.create(...)

  3. 应用迁移

    我想我现在可能可以解决这个问题,因为我已经找到了test_executor:设置一个指向迁移文件的计划并执行它?嗯,对吗?有任何代码:-D

  4. 确认数据库中的旧数据现在与新模型匹配

    同样,我希望这应该很简单:只需获取迁移前创建的实例并确认它已以所有正确的方式更改。

所以挑战真的只是解决如何防止单元测试应用最新的迁移脚本,然后在我们准备好时应用它?


也许我有错误的方法?我是否应该创建装置,并在最后确认它们都很好?是在应用迁移之前还是在它们全部完成之后加载夹具?


通过使用MigrationExecutor和挑选特定的迁移,.migrate我已经能够,也许?,将它回滚到特定状态,然后一个一个地向前滚动。但这令人怀疑;由于缺乏实际的 ALTER TABLE 指令,目前正在追逐 sqlite 捏造。陪审团还在外面。

django django-models django-unittest

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