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
如果你项目中有多个数据库的话,django.db.connection也能很方便的选取数据库。django.db.connections 是一个类字典的结构,允许你使用数据库别名获取connection。
from django.db import connections with connections['my_db_alias'].cursor() as cursor: # Your code here...
使用with作为上下文管理器:
with connection.cursor() as c: c.execute(...)
和下面这段代码等效
c = connection.cursor() try: c.execute(...) finally: c.close()
注意的问题:
如果你做了更新或者插入操作需要在代码中使用 :transaction.commit_unless_managed() 来提交数据。或者使用事务装饰器(例如 commit_on_success)来修饰视图和提供事务控制数据提交。这样就不用在代码中调用transaction.commit_unless_managed()。但是,如果你不手动提交修改,你需要使用 transaction.set_dirty() 将事务标识为已脏。使用 Django ORM 对数据库进行修改时,Django 会自动调用 set_dirty() 。但如果你使用了原始 SQL ,Django 就无法获得你的 SQL 是否修改了数据。只有手动调用 set_dirty() 才能确保 Django 知晓哪些修改必须被提交。
from django.db.transaction import commit_on_success @commit_on_success def my_custom_sql_view(request, value): from django.db import connection, transaction cursor = connection.cursor() # Data modifying operation cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value]) # Since we modified data, mark the transaction as dirty transaction.set_dirty() # Data retrieval operation. This doesn't dirty the transaction, # so no call to set_dirty() is required. cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value]) row = cursor.fetchone() #transaction.commit_unless_managed() return render_to_response('template.html', {'row': row})
以上就是Django中运用sql语句查询数据库的方法。更多Python学习推荐:JQ教程网Python大全。
您可能感兴趣的文章:
django 框架怎么实现对象关系映射
数据库查询语言(1)
django如何删除数据库数据
一文读懂Django中的views.py和html之间的参数传递关系
Django入门指南07-Django数据库开发
学习mysql的查询缓存
Django中如何运用sql语句查询数据库
django如何调用数据库数据
如何启用MySQL的查询语句缓存
不停机状态下使用Django创建索引