【发布时间】:2019-11-06 07:10:26
【问题描述】:
我正在尝试测试我的 db_insert() 方法是否有效。
def db_insert(data, insert_query, limit=100):
"""Persist data to database
:param data: Tuple of tuples
:param insert_query: String
:param limit: Integer
"""
# Insert / Merge
cursor = conn.cursor()
try:
for i in range(0, int(len(data) / limit) + 1):
sliced_data = data[i * limit:i * limit + limit]
if sliced_data:
cursor.executemany(insert_query, sliced_data)
conn.commit()
except Exception as e:
conn.rollback()
raise DBException('ScriptName:db_manager.py,ErrorType:{}Impact:Unable to insert into database,'
'ErrorMessage:{}'.format(type(e).__name__, e))
这个方法被另一个方法调用:
def insert(cls, new_list):
"""Insert new data to DB
:param new_list: List
"""
try:
insert_query = "insert into TABLE {} values {}" \
.format(tuple(cls.TABLE_ATTR[1:]), ('%s',) * len(cls.TABLE_ATTR[1:]))
insert_query = insert_query.replace('\'', '')
db_insert(new_list, insert_query)
except Exception as e:
logger.exception(e)
最后,insert() 方法由 TestCase 子类中的测试调用:
def test_insert_method_success(self):
SomeModule.insert(['text1', 'text2', 'text3', 1, settings.SCRIPT_RUN_TIME])
cursor = conn.cursor()
cursor.execute("select * from TABLE")
data = cursor.fetchall()
print(data) # [1]
[1] 中的输出确实返回 2 个元组。然而,这些元组是使用 models.save() 在setUp() 中添加到数据库中的数据。
有人能告诉我为什么conn.commit() 在实际运行中没有按预期将数据持久化到数据库中吗?
【问题讨论】:
-
tests 为您创建一个新数据库并运行测试并在完成后擦除
-
是的,实际的表有更多的数据。但是这两个返回的元组是在测试运行期间添加的数据
-
cursor = conn.cursor()conn来自哪里?
标签: python django django-models transactions database-connection