如何在 Django 视图中执行原始 SQL 查询?
如何在 views.py
中使用原始 SQL 执行以下操作?
from app.models import Picture
def results(request):
all = Picture.objects.all()
yes = Picture.objects.filter(vote='yes').count()
return render_to_response(
'results.html',
{'picture':picture, 'all':all, 'yes': yes},
context_instance=RequestContext(request)
)
这个结果
函数会是什么样子?
How would I perform the following using raw SQL in views.py
?
from app.models import Picture
def results(request):
all = Picture.objects.all()
yes = Picture.objects.filter(vote='yes').count()
return render_to_response(
'results.html',
{'picture':picture, 'all':all, 'yes': yes},
context_instance=RequestContext(request)
)
What would this results
function look like?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
使用 WHERE 子句过滤赞成票:
use WHERE clause to filter vote for yes:
Django 文档真的非常好。 基本上你有两种选择执行原始 SQL。您可以使用 Manager.raw() 执行返回模型实例的原始查询,也可以避开模型层并直接执行自定义 SQL。
使用
raw()
管理器:如果你想直接绕过模型层,你可以使用
django.db.connection
它代表默认的数据库连接:The Django Documentation is really really good. You have basically two options to execute raw SQL. You can use
Manager.raw()
to perform raw queries which return model instances, or you can avoid the model layer and execute custom SQL directly.Using the
raw()
manager:If you want to bypass the model layer directly you can use
django.db.connection
which represents the default database connection:如果您使用 PostgreSQL,则可以在一个查询内完成此操作。
如果没有,您可以相应地更改查询并获取结果。
It can be done within one query if you are using PostgreSQL.
If not, you can change the query accordingly and get the results.
具有特定数据库名称的原始sql:
Raw sql with the specific database name:
你可以试试这个
You Can try this
raw() 方法可用于执行返回模型实例的原始 sql 查询..查看文档
如果您可能执行未完全映射到模型的查询..
django.db.connection 代表默认数据库连接所以调用
connection.cursor() 使用数据库连接。 查看文档
raw() method can be used to perform raw sql queries that return model instances ..see docs
if you might perform queries that don't map cleanly to models ..
django.db.connection represents default database connection so call
connection.cursor() to use database connection. see docs
例如,您有如下所示的
Person
模型:然后,您可以使用
cursor.execute() 运行原始 SQL 查询
并使用cursor.fetchall()
获取结果,如果没有更多结果,cursor.fetchall()
返回[]
如下图。 *文档 解释了更多相关信息:控制台上的输出:
并且,您还可以使用
cursor.fetchone()
来获取结果,如果没有更多结果,则使用cursor.fetchone ()
返回None
如下所示:控制台输出:
并且,您还可以使用 transaction 如下所示:
或:
或:
然后,事务运行根据下面这些 PostgreSQL 日志。 *我使用PostgreSQL和我的答案 解释了如何记录 PostgreSQL 查询:
For example, you have
Person
model as shown below:Then, you can run the raw SQL query with
cursor.execute()
and get the result withcursor.fetchall()
and if there is no more result,cursor.fetchall()
returns[]
as shown below. *The documentation explains more about it:Output on console:
And, you can also use
cursor.fetchone()
to get the result and if there is no more result,cursor.fetchone()
returnsNone
as shown below:Output on console:
And, you can also use transaction as shown below:
Or:
Or:
Then, transaction is run according to these PostgreSQL logs below. *I used PostgreSQL and my answer explains how to log PostgreSQL queries: