- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在 Django 应用程序中使用了两个数据库,一个是“事务性”数据库,一个是“分析性”数据库(用作数据仓库)。 “事务性”模型是使用 Django 模型创建的,“分析性”模型是使用我们的自定义脚本创建的,其中包含“事务性”表的多个连接的原始 sql。
当我们为 django 应用程序运行测试时,两个数据库都会创建它们的测试对应版本,比方说,“test_transactional”和“test_analytical”。 “test_transactional”的创建没问题,但我们希望跳过“test_analytical”的创建,因为它将由我们的自定义脚本创建和填充。
来自 Jenkins 日志的片段:
python manage.py test --keepdb cis.tests.test_views --
noinput --settings=strainprint.settings.local --verbosity=2
...
Using existing test database for alias 'analytics'
('test_strainprint_analytics')...
...
Synchronizing apps without migrations:
Creating tables...
Creating table django_admin_log
Creating table auth_permission
...
有没有办法在 Django 中实现这一点?我们使用的是 django 1.10。
最佳答案
根据要求,这是我最终实现的。这里的“遗留”数据库是我们要跳过创建的数据库——Django 应该假定它已经存在。
您首先需要添加这个经过轻微修改的测试运行器,project/runner.py
:
from django.test.runner import DiscoverRunner
from django.test.utils import get_unique_databases_and_mirrors
from django.db import connections
class LegacyDatabaseRunner(DiscoverRunner):
"""
Test runner that will skip attempting to create any database with LEGACY=True
in its TEST configuration dictionary
"""
def setup_databases(self, **kwargs):
return _setup_databases(
self.verbosity, self.interactive, self.keepdb, self.debug_sql,
self.parallel, **kwargs
)
def _setup_databases(verbosity, interactive, keepdb=False, debug_sql=False, parallel=0, **kwargs):
"""Clone of django.test.utils.setup_databases"""
test_databases, mirrored_aliases = get_unique_databases_and_mirrors()
old_names = []
for db_name, aliases in test_databases.values():
first_alias = None
for alias in aliases:
connection = connections[alias]
# This clause is all that's been added. If the database's TEST configuration
# has LEGACY=True, skip attempting to create the database, and don't add it
# to the list of databases to tear down after testing is complete.
if connection.settings_dict.get('TEST', {}).get('LEGACY', False):
continue
old_names.append((connection, db_name, first_alias is None))
# Actually create the database for the first connection
if first_alias is None:
first_alias = alias
connection.creation.create_test_db(
verbosity=verbosity,
autoclobber=not interactive,
keepdb=keepdb,
serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True),
)
if parallel > 1:
for index in range(parallel):
connection.creation.clone_test_db(
suffix=str(index + 1),
verbosity=verbosity,
keepdb=keepdb,
)
# Configure all other connections as mirrors of the first one
else:
connections[alias].creation.set_as_test_mirror(connections[first_alias].settings_dict)
# Configure the test mirrors.
for alias, mirror_alias in mirrored_aliases.items():
connections[alias].creation.set_as_test_mirror(
connections[mirror_alias].settings_dict)
if debug_sql:
for alias in connections:
connections[alias].force_debug_cursor = True
return old_names
接下来,将其设置为 project/settings.py
中的默认运行程序:
TEST_RUNNER = 'project.runner.LegacyDatabaseRunner'
然后在您的设置中使用 LEGACY=True
标记您想要跳过创建的任何数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': ...,
},
'legacy_db1': {
'ENGINE': 'sql_server.pyodbc',
'NAME': ...,
'TEST': {
'LEGACY': True, # Do not manage this database during tests
},
},
}
然后希望运行 manage.py test
能按预期工作。
请注意,这在运行并行测试时将不起作用。我通过修补 ParallelTestSuite.init_worker
并使用 setup_databases
做了一些改进,但它还没有完全发挥作用。
这不是一种特别安全的方法,因为此配置选项的语义可能会改变,但您可以将一个数据库声明为另一个数据库的“副本”:
DATABASES = {
'default': {
'NAME': 'transactional',
...
},
'analytical': {
'NAME': 'analytical',
...
'TEST': {
'MIRROR': 'default',
},
}
}
MIRROR
配置选项记录在此处:https://docs.djangoproject.com/en/dev/topics/testing/advanced/#testing-primary-replica-configurations
相关的 Django 源代码在这里:https://github.com/django/django/blob/master/django/test/utils.py
关于python - 如何跳过在 Django 中创建测试数据库之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51071355/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!