在django中一些比较复杂的方法不适合使用orm,需要使用到sql语句查询。而django默认使用sql语句查询直接返回一个列表元祖数据,使用起来及其不是很方便。
django使用sql语句方法:from django.db import connection
def my_custom_sql(self):
with connection.cursor() as cursor:
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
默认情况下,Python DB API将返回没有字段名称的结果,意味着您最后得到一个list值,而不是一个dict。在消耗较小的性能和内存成本下,可以使用以下内容返回结果dict。
第一种 方法:def dictfetchall(cursor):
"从cursor获取所有行数据转换成一个字典"
columns = [col[0] for col in cursor.description]
return [
dict(zip(columns, row))
for row in cursor.fetchall()
]
第二种方法:是使用python标准库:collections.namedtuple()。
namedtuple是一个类似元组的对象,其字段可通过属性查找