根据数据库表生辰model代码
django的orm可以根据model生成数据库表,也可以逆向的根据数据库表生成model
命令
# 不指定表名称将生成所有表的model
python manage.py inspectdb [表名称]
例子
python manage.py inspectdb user
输入上面的命令生成user表的model,将会输出以下内容
class AccountsAccount(models.Model):
id = models.CharField(primary_key=True, max_length=32)
name = models.CharField(max_length=128)
username = models.CharField(max_length=128)
class Meta:
managed = False
db_table = 'accounts_account'
数据库操作
查询操作
# 假设有一个名为Book的模型,我们想要过滤出所有作者名字为'Author Name'的书籍
books = Book.objects.filter(author='Author Name')
# 排除所有作者名字为'Author Name'的书籍
books = Book.objects.exclude(author='Author Name')
# 获取作者名字为'Author Name'且ID为1的书籍
book = Book.objects.get(author='Author Name', id=1)
# 获取所有书籍,按照价格升序排列
books = Book.objects.all().order_by('price')
# 如果你想要按照某个字段进行降序排序,
# 可以在order_by()方法中使用字段名并加上一个减号(-)作为参数。
# 获取所有书籍,按照价格降序排列
books = Book.objects.all().order_by('-price')
# 获取所有不同作者的名字,去重
authors = Author.objects.values_list('name').distinct()
# 获取所有书籍的标题和价格
books = Book.objects.values('title', 'price')
# 获取所有书籍的ID和作者名字,以元组形式
books = Book.objects.values_list('id', 'author__name')
# 模糊查询
#contains:大小写敏感,判断某个字段是否包含了某个数据。示例代码如下:
articles = Article.objects.filter(title__contains='hello')
#在翻译成SQL语句为如下:
#select ... where title like binary '%hello%';
'''
要注意的是,在使用contains的时候,
翻译成的sql语句左右两边是有百分号的,
意味着使用的#是模糊查询。而exact翻译成sql语句左右两边是没有百分号的,
意味着使用的是精确的查询。
'''
# icontains:大小写不敏感的匹配查询。示例代码如下:
articles = Article.objects.filter(title__icontains='hello')
#在翻译成SQL语句为如下:
#select ... where title like '%hello%';
# 条件or查询
from django.db.models import Q
User.objects.filter(Q(state=0) | Q(state=1))
'''
Django各种条件查询关键字:
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
'''
插入,更新,删除操作
# 1.增加
UserInfo.objects.create(name="韩梅梅", password="123456", age=18)
# 2.删除
UserInfo.objects.filter(id=3).delete()
UserInfo.objects.all().delete()
# 5.更新数据
Department.objects.all().update(title="开发部")
Department.objects.filter(id=2).update(title="技术部")