我有一个托管= 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"?
在实际应用程序中,此模型实际上由数据库中的视图支持.但是对于测试期间,我想将其视为一个表,并能够在那里插入测试数据.
结论:在使用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数据库会发生这种情况,但有时只会发生. …