执行原生SQL语句的方式
原生sql语句
cursor方法:
from api.models import *
from django.db import connection,connections
cursor=connection.cursor()##cursor=connection['default'].cursor()配置了sql数据库的情况
##不传参数的情况
# cursor.execute("""select * from api_userinfo """)
为原生sql语句设置参数的情况
# cursor.execute("""select * from api_userinfo where id=%s""",[2,])
# cursor.execute("""select * from api_userinfo where id=%s"""%1)
cursor.execute("select * from api_userinfo where id=%s",params=[1,])
# row=cursor.fetchone()
# row=cursor.fetchmany()
row=cursor.fetchall()##拿到全部的数据
# print(row)
'''
[(1, 'yunxin', '123')]
'''
row方法:(掺杂着原生sql和orm来执行的操作)
res=UserInfo.objects.raw('select id as nid from api_userinfo where id>%s',params=[1,])
print(res.columns)
print(type(res))
在select里面查询到的数据orm里面的要一一对应
UserInfo.objects.raw('select id as nid from '其他表')
后面的select的不一定是UserInfo表,有可能是是其他表,只要字段名字一样就可以
如果select的是其他表的时候,必须将名字设置为当前UserInfo的主键列名
translations:
UserInfo.objects.raw('select id as nid from '其他表' where nid>%s',params=[1,])
后面可以加参数进来
name={}
translations=name
将或取到的列名转化为指定的列名,才可以查询
# UserInfo.objects.all().using('default')
val=UserInfo.objects.using('default').all().values('id')
#选择连接那个数据库,但是queryset的时候,才有using方法
print(val)
#选择连接那个数据库,但是queryset的时候,才有using方法
结果:
<QuerySet [{'id': 1}, {'id': 2}, {'id': 3}]>
exclude方法:(将什么排除)
val=UserInfo.objects.using('default').all().values('id').exclude(id=1)##exclude将id=1的排除在外
#选择连接那个数据库,但是queryset的时候,才有using方法
print(val)
结果:
<QuerySet [{'id': 2}, {'id': 3}]>