Django数据库的查看、删除,创建多张表并建立表之间关系
生活随笔
收集整理的这篇文章主要介绍了
Django数据库的查看、删除,创建多张表并建立表之间关系
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试:
settings里面的设置:
#可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},} }tests.py的配置
# 这样设置是方便我们直接在这里里面操作运行,就可以看效果 import osif __name__ == '__main__':os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day08.settings")import djangodjango.setup()# 导入models里面的Book模块,用于在这里引用from app01.models import *book=Book.objects.all().filter(publish='中央出版社88')print(book)book = Book.objects.all().filter(nid=1)print(book)#下面就可以写一些对数据库操作的命令,在本窗口就可以实现调试# 查询name里面以红字开头的book=Book.objects.all().filter(name__startswith='红')print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>.......数据库的查看操作:
#基于双下划线的模糊查询# 查询name里面以红字开头的book=Book.objects.all().filter(name__startswith='红')print(book.values_list()) #<QuerySet [(3, '红楼梦', Decimal('30.00'), datetime.date(2001, 1, 12), '作者2', '上海出版社')]>#查询name里面以传字结尾的book=Book.objects.all().filter(name__endswith='传')print(book) #<QuerySet [<Book: 水浒传>, <Book: 自传>]>#查询name里面包含果字的book=Book.objects.all().filter(name__contains='国')print(book) #<QuerySet [<Book: 三国演义>, <Book: 国策>]>#name__icontains查询的时候不区分大小写,都能匹配到#查询在后面列表里面的idbook=Book.objects.filter(nid__in=[1,2,3,4]) #匹配到4本print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 红楼梦>, <Book: 小红薯>]>#nid大于26的数据book=Book.objects.all().filter(nid__gt='26')#nid小于3的数据book = Book.objects.all().filter(nid__lt=3)#nid小于等于3的数据book=Book.objects.filter(nid__lte='3') #包含nid=3#nid大于等于26的数据book=Book.objects.filter(nid__gte='26') #包含nid=26print(book)#查找id在列表范围内的数据(注意,包含1和3)# book=Book.objects.all().filter(nid__range=[1,3])# print(book)#查找>=10 并且 <=15的值book=Book.objects.all().filter(price__gte=20,price__lte=24)print(book) #<QuerySet [<Book: 三国演义>, <Book: 书1>, <Book: 国策>]>#根据出版日期查询,年、月、日book=Book.objects.filter(pub_date__year=1997)book=Book.objects.filter(pub_date__month=2)book=Book.objects.filter(pub_date__day=11)book=Book.objects.filter(pub_date__day__in=[12,5])数据库的删除操作:
#删除 #queryset来删除ret=Book.objects.filter(nid=20).delete()print(ret) #(1, {'app01.Book': 1}) #对象来删除ret = Book.objects.filter(nid=18).first() #书2ret = Book.objects.filter(nid=19).first().delete()print(ret) #(1, {'app01.Book': 1}) 1:本次操作总共影响了多少条记录 1:本张表里面影响的记录数#manager对象不行,例如:ret=Book.objects.delete()#这个可以,清空表里所有数据信息ret=Book.objects.all().delete() #不要轻易使用数据库的更改操作:
#更新(更新)#返回的结果是int类型,只能queryset对象来调用,对象不能来调用,返回的结果是int类型#例如下面first对象调用就报错:ret=Book.objects.all().filter(nid=9).first().update(name='aaa') #错误的写法,不能用对象调用print(ret) #报错 'Book' object has no attribute 'update' ret = Book.objects.all().filter(nid=9).update(name='书9999')print(ret) #1 ret = Book.objects.all().filter(nid=10).update(name='书10书10',price=1.1) #可以同时改几个字段print(ret) #1
Django创建多张表并建立表之间的关系:
创建环境的注意点如下:
第一步:创建Django项目 第二步:创建static文件夹目录并,并在settings.py里面添加文件路径(此步骤本项目暂时没用到)STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR,'static') ]第三步:settings.py里面这一行注释掉:# 'django.middleware.csrf.CsrfViewMiddleware',第四步:app01---下面的---__init__.py文件下面设置,指定对mysql数据库的操作import pymysqlpymysql.install_as_MySQLdb() 第五步:settings里面设置连接mysql数据库的信息,例如地址、端口、数据库名字、用户名、密码 等 DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'info','HOST':'127.0.0.1','PORT':3306,'USER':'root','PASSWORD':'root',}}第六步:models里面设置class类(即单独设置每张表的字段、格式、以及关联关系等)第七步:运行命令将将信息录入的数据库中 python3 manage.py makemigrations python3 manage.py migrate第八步:接下来就是对数据表的增、删、改、查操作
models.py里面的设置:
from django.db import models# Create your models here.#出版社表 class Publish(models.Model):nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)addr=models.CharField(max_length=64)email=models.EmailField()#作者表(与AuthorDetail是一对一关系) class Author(models.Model):nid=models.AutoField(primary_key=True)name=models.CharField(max_length=32)age=models.IntegerField()#建立与AuthorDetail一对一关系authordetail=models.OneToOneField(to='AuthorDetail',to_field='nid')#作者详细信息表 class AuthorDetail(models.Model):nid=models.AutoField(primary_key=True)phone=models.CharField(max_length=32)email=models.EmailField()#书籍表 class Book(models.Model):nid=models.AutoField(primary_key=True)price=models.DecimalField(max_digits=5,decimal_places=2)pub_date=models.DateField()#与出版社绑定一对多关系publish=models.ForeignKey(to='Publish',to_field='nid')#与作者绑定多对多关系(会生成第三张表)authors=models.ManyToManyField(to='Author')建完之后关系图如下:
转载于:https://www.cnblogs.com/yangzhizong/p/9621763.html
总结
以上是生活随笔为你收集整理的Django数据库的查看、删除,创建多张表并建立表之间关系的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: python全栈开发第36天------
- 下一篇: Django:模型model和数据库my