【发布时间】:2022-12-16 07:47:54
【问题描述】:
我有一个 Django 测试数据库的问题。
我使用这样的 setUp 方法:
def setUp(self):
super().setUp()
self.obj1 = MyModel.objects.create(name="name1")
self.obj2 = MyModel.objects.create(name="name2")
self.obj3 = MyModel.objects.create(name="name3")
但是当我尝试连接到测试数据库时:
import psycopg2
from psycopg2 import sql
db_uri = settings.DB_URI.replace("/db_name", "/test_db_name")
con = psycopg2.connect(db_uri)
cur = con.cursor()
并执行:
query = sql.SQL(
"select * from {table};"
).format(
table=sql.Identifier("mymodel_table_name"),
)
cur.execute(query)
print('result', cur.fetchall())
结果我看到了空列表。
但! 如果我在测试数据库中插入一些东西:
query = sql.SQL(
"insert into {table} (id, name) values ({id}, {name});"
).format(
table=sql.Identifier("mymodel_table_name"),
id=sql.Literal(some_id),
name=sql.Literal(some_name),
)
cur.execute(query)
当我执行时,我在 ORM 中看到它:
MyModel.objects.all()
我的目的是获取 test_db_name 所有对象,我将其插入到 setUp 方法中。
感谢您的任何帮助!
【问题讨论】:
-
看起来您正在将数据插入生产数据库而不是测试数据库。这就是 ORM 能够打印值的原因,您可以尝试使用 pgadmin 登录 psql 并验证生产和测试数据库的内容吗?
-
@JayantSeth 抱歉,我忘了说清楚:我在 TestCase 中执行 MyModel.objects.all() 。
-
即使在那种情况下它可能仍在使用生产数据库,请您使用 pgadmin 或 psql shell 来验证生产和测试数据库的内容。
标签: python django django-testing