1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python直接执行*.sql_Python Django 之 直接执行自定义SQL语句(一)

python直接执行*.sql_Python Django 之 直接执行自定义SQL语句(一)

时间:2018-09-09 17:51:44

相关推荐

python直接执行*.sql_Python Django 之 直接执行自定义SQL语句(一)

三、raw()方法

1、raw()用法

The raw() manager method can be used to perform raw SQL queries that return model instances:

Manager. raw ( raw_query , params=None , translations=None )

用法:

>>> for p in Person.objects.raw('SELECT * FROM Person LIMIT 2'):

... print p

John Smith

Jane Jones

注意,原始SQL里的model,如果在 db_table 没有定义,则使用app的名称,后面下划线 后面接模型类的名称,如"Myblog_New";上面的例子,在定义类的时候已经这样处理了:

Class New(models.Model):

......

......

#自定义表名

class Meta:

db_table = 'New'

2、查询字段隐射到模型字段(Mapping query fields to model fields)

raw() automatically maps fields in the query to fields on the model.并且是通过名称来匹配,这意味着我们可以使用SQL子句(clause)

>>> Person.objects.raw('''SELECT first AS first_name,

... last AS last_name,

... bd AS birth_date,

... pk as id,

... FROM some_other_table''')

返回一个RawQuerySet对象

3、索引查找(Index lookups)

first_person = Person.objects.raw('SELECT * from myapp_person')[0]

first_person = Person.objects.raw('SELECT * from myapp_person LIMIT 1')[0]

#然而,索引和切片不是在数据库级别上执行(除LIMIT外)

4、延迟模型字段(Deferring model fields)

Fields may also be left out(left out:忽视,不考虑;被遗忘),这意味着该字段的查询将会被排除在根据需要时的加载。

>>> for p in Person.objects.raw('SELECT id, first_name FROM myapp_person'):

... print p.first_name, # 这将检索到原始查询

... print p.last_name # 这将检索需求

...

John Smith

Jane Jones

这个例子其实检索了三个字段,一个主键(必需)、一个原始SQL字段、一个需求字段。这里主键字段不能省略,否则会出错,如下:

5、传递参数(Passing parameters into raw() )

如果需要执行参数化查询,您可以使用params参数原始()

注意两点:

(1)、必须使用[参数],否则出错:

(2)、这种方式不对:

Error:

>>> query = 'SELECT * FROM myapp_person WHERE last_name = %s' % lname

>>> Person.objects.raw(query)

转载自:/hello-/articles/9095444.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。