相关疑难解决方法(0)

如何在使用managed = False的Django测试期间创建表

我有一个托管= False的模型.

class SampleModel(models.Model):
    apple = models.CharField(max_length=30)
    orange = models.CharField(max_length=30)

    class Meta:
        managed = False
Run Code Online (Sandbox Code Playgroud)

我有一个单元测试,它创建了一个SampleModel,但是当我运行测试时,我得到:

DatabaseError: no such table: SAMPLE_SAMPLE_MODEL
Run Code Online (Sandbox Code Playgroud)

django文档 - https://docs.djangoproject.com/en/dev/ref/models/options/#managed记录以下内容:

对于涉及托管= False的模型的测试,由您来确保在测试设置中创建正确的表.

如何在测试设置期间实际"创建"表格?或者,我怎样才能使它在运行测试时,在测试期间该模型具有"managed = True"?

在实际应用程序中,此模型实际上由数据库中的视图支持.但是对于测试期间,我想将其视为一个表,并能够在那里插入测试数据.

python django unit-testing

32
推荐指数
3
解决办法
8928
查看次数

在使用pytest-django进行测试期间,Django连接对象没有看到第二个数据库的表

结论:在使用pytest-django测试期间,我的Django连接对象没有看到第二个数据库的表关系.

概述: 我有一个问题,我的Django连接对象似乎得到错误的数据库信息.我偶然发现了这个问题,当我在"客户" DB查询在桌子上,Django的告诉我的关系不存在.使用settings.py数据库部分设置如下:

DATABASES = {
    'default': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.postgres',
        'USER': 'postgres_1',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.postgres',
        'USER': 'postgres_1',
        'PASSWORD': 'superS3cret'
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在目录上运行'pytest'时,下面的两个游标都从'default'数据库中获取信息:

sql = """SELECT table_name FROM information_schema.tables WHERE table_nameschema='public'"""

default = connections["default"].cursor()
default.execute(sql)
raw_data = default.fetchall()
sql_columns = [col[0] for col in default.description]
df1 = pd.DataFrame(raw_data, columns=sql_columns)

customers = connections["customers"].cursor()
customers.execute(sql)
raw_data = customers.fetchall()
sql_columns = [col[0] for col in customers.description]
df2 = pd.DataFrame(raw_data, columns=sql_columns)
Run Code Online (Sandbox Code Playgroud)

df1和df2的结果完全相同:只有'default'数据库中的表名.

使用pytest-django并使用第二个Postgres数据库会发生这种情况,但有时只会发生. …

django pytest pytest-django

9
推荐指数
1
解决办法
706
查看次数

标签 统计

django ×2

pytest ×1

pytest-django ×1

python ×1

unit-testing ×1