django-admin startproject django項目名稱
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app_mysql.apps.AppMysqlConfig', #這個是咱們pycharm建立時候自動幫咱們註冊的就是app配置 'app_mysql', #若是有新的或者命令行建立的app咱們只要這這裏面把app名稱寫上去便可 ]
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.sqlite3', #sqlite3數據庫是個小型的數據庫 'NAME':os.path.join(BASE_DIR,'sqlite3') #NAME填寫路徑便可 } # 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME':'庫名', # 'USER':'mysql帳號名稱', # 'PASSWORD':'mysql密碼', # 'HOST':'127.0.0.1', # } }
import pymysql pymysql.install_as_MySQLdb()
配置表單信息
python
from django.db import models # Create your models here. class sb(models.Model): ### 主鍵自增id不用寫, 默認會加上 name = models.CharField(max_length=30,null=True) class big_sb(models.Model): name = models.CharField(max_length=30, null=True) bigsb = models.ForeignKey('sb',id) class sb2(models.Model): name = models.CharField(max_length=30,null=True)
在命令行進行操做mysql
必須先在邏輯業務層中載入sql
from 表單所在的app名稱 import models
數據庫
其中表名均爲再modelse中配置的表的名稱
django
單條數據:session
多條數據:app
info = [ models.UserInfo(name='root1', age=34, ut_id=1), models.UserInfo(name='root2', age=35, ut_id=2), models.UserInfo(name='root3', age=36, ut_id=1), models.UserInfo(name='root4', age=37, ut_id=3), models.UserInfo(name='root5', age=32, ut_id=1), ] models.UserInfo.objects.bulk_create(info)
models.表名.objects.filter(知足的條件).delete()
models.表名.objects.filter(知足的條件).update(name='lll', age=23)
models.UserType.objects.all().values()
表A的ud關聯表b
框架
經過A表中的ud查到表b的id
方法一:models.A.objects.all().values('ud__id')fetch
方法二spa
res = models.A.objects.all() for a in res: print(a.ud.id)
經過b表中的查到a表ID
方法一:models.B.objects.all().values('A__id')
方法二:
res = models.B.objects.all() for b in res: print(b.a_set.id) #### 表名小寫_set
filter
知足條件的
exclude
不知足條件
用法:
#id等於3的 models.表名.objects.filter(id=3).values() #id不等於3的 models.表名.objects.exclude(id=3).values()
關於filter與exclude裏面填寫的參數
等於:字段名=值
大於:字段名__gt=值
大於等於:字段名__gte=值
小於:字段名__lt=值
小於等於:字段名__lte=值
res = models.表名.objects.filter(字段名__in=[2,4,5]) # where id in (2,4,5) res = models.表名.objects.exclude(字段名__in=[1,2]) # where id not in (1,2)
# where id between 4 and 8 [4,8] res = models.表名.objects.filter(字段名__range=[4,8])
# where name like 'a%' res = models.表名.objects.filter(字段名__startswith="a") res = models.表名.objects.filter(字段名__istartswith="a") #忽略大小寫 # where name like '%a' res = models.表名.objects.filter(字段名__endswith="a") res = models.表名.objects.filter(字段名__iendswith="a") #忽略大小寫 # where name like '%a%' res = models.表名.objects.filter(字段名__contains="a") res = models.表名.objects.filter(字段名__icontains="a") #忽略大小寫
只要是i開頭的基本上都是忽略大小寫
# select count(*) from userinfo where id>3; # select count(id) from userinfo where id>3; #用sql語句查詢數據條數儘可能不要查count(*)查主鍵會快不少 res = models.UserInfo.objects.filter(id__gt=3).count()
#升序 res = models.表名.objects.order_by('字段名稱') #降序 res = models.表名.objects.order_by('-字段名稱') #多個條件進行排序 res = models.表名.objects.order_by('字段1','字段2') #當字段1相同是會更具字段2進行排序
# select id, sum(age) as s, username from userinfo group by username from django.db.models import Count, Min, Max, Sum res = models.UserInfo.objects.values("name").annotate(s=Sum('age')) # select id, sum(age) as s, username from userinfo group by username having s > 50; res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)
# limit 1, 3 分頁 res = models.UserInfo.objects.all()[1:4] #由於獲取對象是列表全部切片便可
第一條:res = models.表名.objects.first()
最後一條:res = models.表名.objects.last()
只查某個字段:only('字段名稱')
除某個字段之外的全部字段:defer('字段名')
注意:主鍵id無論怎麼樣都會查
只有and
#id等於3and名字等於a models.表名.objects.filter(id=3,and name='a').values()
只有or
# Q from django.db.models import Q res = models.UserInfo.objects.filter(Q(id__gt=3) | Q(name='zekai')) #or用|連接
有and和or
# Q from django.db.models import Q res = models.UserInfo.objects.filter( Q(Q(id__gt=3) | Q(name='zekai')) & Q(age=23) ) and用&連接
from django.db.models import F models.UserInfo.objects.update(name=F('name')+1) #字段名稱都加1
from django.db import connection, connections cursor = connection.cursor() # cursor = connections['default'].cursor() cursor.execute("""SELECT * from auth_user where id = %s""", [1]) row = cursor.fetchone() print(row)
models.UserInfo.objects.values("name", 'age').distinct() #前面values有多少個就對多少個值進行去除
print(res.query) 查看上述代碼生成的sql語句