1.工程下建立APP(以WIN10+PYTHON3.6为例)
C:\Users\WYS>django-admin startproject myweb #建立项目
C:\Users\WYS>cd myweb
C:\Users\WYS\myweb>django-admin startapp myapp #建立项目下属APP
2.APP下的models.py文件中加入表结构(django中之所以把表结构在自身文件中定义,是为了在其他文件中可直接引用表结构进行数据库操作,不用频繁刷新数据表获取表结构)
from django.db import models # Create your models here. class book_info(models.Model):
fromuser = models.CharField(max_length=30, default='WYS')
fromsite = models.CharField(max_length=50)
bookname = models.CharField(max_length=50)
#updatetime = models.DateTimeField()
#lastchapter = models.CharField(max_length=100) class site_info(models.Model):
sitename = models.CharField(max_length=50)
bookname = models.CharField(max_length=50)
url = models.CharField(max_length=200)
updatetime = models.DateTimeField()
lastchapter = models.CharField(max_length=100)
3.在myweb/myweb/settings.py中加入创建的APP和MYSQL连接信息
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test',
'HOST': 'localhost',
'PORT': '',
}
}
4.将models.py中的数据库表结构同步到MYSQL中
C:\Users\WYS\myweb>python manage.py migrate #创建表结构
C:\Users\WYS\myweb>python manage.py makemigrations myapp #告诉django,myapp中的表结构有更新
C:\Users\WYS\myweb>python manage.py migrate myapp #执行myapp中的表结构到mysql中
数据库中的表名为myapp_book_info,myapp_site_info,但django代码中调用时的表名为models.py中定义的表名book_info,site_info
5.数据表操作-增
from myapp.models import book_info
test1 = book_info(fromuser='testuser',fromsite='testsite',bookname='testbookname')
test1.save()
book_info.objects.create(fromuser='testuser',fromsite='testsite',bookname='testbookname')
6.数据库操作-删
test1 = book_info.objects.get(bookname='testbookname')
test1.delete()
book_info.objects.filter(bookname='testbookname').delete()
book_info.objects.all().delete()
7.数据库操作-改
test1 = book_info.objects.get(bookname='testbookname')
test1.bookname = 'book1'
test1.fromuser = 'user1'
test1.save
book_info.objects.filter(bookname='testbookname').update(fromuser='user1')
book_info.objects.all().update(fromuser='user1')
8.数据库操作-查
list = book_info.objects.all()
for i in list:
print(i.book_name)
list = book_info.objects.filter(bookname='testbookname', fromuser='testuser') #类似于SQL中的WHERE
list = book_info.objects.filter( fromuser__contains='testuser') #注意中间是双下划线,类似于SQL中的where fromuser like "%testuser%"
#此外还有icontains(大小写无关的like),startswith和endswith, 还有range(SQL BETWEEN查询)
list = book_info.objects.get(bookname='testbookname') #返回单条记录,不需要for直接list.bookname使用
list = book_info.objects.filter().exclude().filter() #可无限嵌套
book_info.object.all()[:5] #前5条记录
book_info.object.order_by(bookname)[2:5] #排序后的第3、4、5条记录
book_info.object.order_by(bookname)[0] #排序后的第1条记录
book_info.object.order_by(bookname)[0:1].get() #排序后的第1条记录
book_info.object.all()[:10:2] #从第1条记录到第11条记录步长为2的数据集
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别