django ORM 增删改查 模糊查询 字段类型 及参数等
ORM 相关
#sql中的表
#创建表:
CREATE TABLE employee(
id INT PRIMARY KEY auto_increment ,
name VARCHAR (),
gender BIT ,
birthday DATA ,
department VARCHAR (),
salary DECIMAL (,) unsigned,
);
#sql中的表纪录
#添加一条表纪录:
INSERT employee (name,gender,birthday,salary,department)
VALUES (,,"保洁部");
#查询一条表纪录:
SELECT * FROM employee WHERE age=;
#更新一条表纪录:
UPDATE employee SET birthday=;
#删除一条表纪录:
DELETE FROM employee WHERE name="alex"
#python的类
class Employee(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=)
gender=models.BooleanField()
birthday=models.DateField()
department=models.CharField(max_length=)
salary=models.DecimalField(max_digits=,decimal_places=)
#python的类对象
#添加一条表纪录:
emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")
emp.save()
#查询一条表纪录:
Employee.objects.filter(age=)
#更新一条表纪录:
Employee.objects.filter(id=).update(birthday="1989-10-24")
#删除一条表纪录:
Employee.objects.filter(name="alex").delete()
from django.db import models
#表的创建
# Create your models here.
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=)
pub_data = models.DateField()
price = models.DecimalField(max_digits=, decimal_places=)
publish = models.CharField(max_length=)
def __str__(self):
return self.name
更多的字段 AutoField(Field)
- int自增列,必须填入参数 primary_key=True
BigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True
注:当model中如果没有自增列,则自动会创建一个列名为id的列
from django.db import models
class UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=)
class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=)
SmallIntegerField(IntegerField):
- 小整数 - ~
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 ~
IntegerField(Field)
- 整数列(有符号的) - ~
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 ~
BigIntegerField(IntegerField):
- 长整型(有符号的) - ~
自定义无符号整数字段
class UnsignedIntegerField(models.IntegerField):
def db_type(self, connection):
return 'integer UNSIGNED'
PS: 返回值为字段在数据库中的属性,Django字段默认的值为:
'AutoField': 'integer AUTO_INCREMENT',
'BigAutoField': 'bigint AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime',
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'DurationField': 'bigint',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time',
'UUIDField': 'char(32)',
BooleanField(Field)
- 布尔值类型
NullBooleanField(Field):
- 可以为空的布尔值
CharField(Field)
- 字符类型
- 必须提供max_length参数, max_length表示字符长度
TextField(Field)
- 文本类型
EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制
IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:.1时候,可解析为192.,开启刺功能,需要protocol="both"
URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
DateTimeField(DateField)
- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
DateField(DateTimeCheckMixin, Field)
- 日期格式 YYYY-MM-DD
TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]]
DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
FloatField(Field)
- 浮点型
DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度
BinaryField(Field)
- 二进制类型
字段对应的相关参数 null 如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False. blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。 如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。 default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为, 否则没必要设置任何一个字段的primary_key=True。 unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,<br>而且这个选择框的选项就是choices 中的选项。
Sample :
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=)
class Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table = "table_name"
# 联合索引
index_together = [
("pub_date", "deadline"),
]
# 联合唯一索引
unique_together = (("driver", "restaurant"),)
# admin中显示的表名称
verbose_name
# verbose_name加s
verbose_name_plural
settings.py 文件中对应的配置项
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'lqz',
'USER': 'root',
',
'HOST': '127.0.0.1',
,
'ATOMIC_REQUEST': True,
'OPTIONS': {
"init_command": "SET storage_engine=MyISAM",
}
}
}
'''
'NAME':要连接的数据库,连接前需要创建好
'USER':连接数据库的用户名
'PASSWORD':连接数据库的密码
'HOST':连接主机,默认本机
'PORT':端口 默认3306
'ATOMIC_REQUEST': True,
设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器
'OPTIONS': {
"init_command": "SET storage_engine=MyISAM",
}
设置创建表的存储引擎为MyISAM,INNODB
注意1:NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库的用户名和密码。设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的__init__,在里面写入:
import pymysql pymysql.install_as_MySQLdb()
最后通过两条数据库迁移命令即可在指定的数据库中创建表 :
python manage.py makemigrations python manage.py migrate
注意2:确保配置文件中的INSTALLED_APPS中写入我们创建的app名称
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"book"
]
注意3:如果报错如下:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None
MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:
通过查找路径C:\Programs\Python\Python36-32\Lib\site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql
这个路径里的文件把
if version < (1, 3, 3):
raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
注释掉就可以了
注意4: 如果想打印orm转换过程中的sql,需要在settings中进行如下配置:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
增删改查
增加,删除字段
删除,直接注释掉字段,执行数据库迁移命令即可
新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,此时需要设置
publish = models.CharField(max_length=,default='人民出版社',null=True)
注意:
数据库迁移记录都在 app01下的migrations里
使用showmigrations命令可以查看没有执行migrate的文件
makemigrations是生成一个文件,migrate是将更改提交到数据量
添加表记录 # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象
方法一: book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12") book_obj.save()all(): 查询所有结果
filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。 exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 order_by(*field): 对查询结果排序 reverse(): 对查询结果反向排序 count(): 返回数据库中匹配查询(QuerySet)的对象数量。 first(): 返回第一条记录 last(): 返回最后一条记录 exists(): 如果QuerySet包含数据,就返回True,否则返回False values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列 values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 distinct(): 从返回结果中剔除重复纪录Sample:
def index(request):
# 添加表记录++++++++++++++++++++++++++++++++++
# 方式一
# book=Book(name=,publish='老男孩出版社')
# book.save()
# 方式二
# Book.objects.create(name=,publish='人民出版社')
# 查询表记录++++++++++++++++++++++++++++++++++
# QUerySet数据类型(类似于一个列表,里面放着一些对象)
# 方法的返回值是什么
# 方法的调用者
# () all方法 返回一个QuerySet对象
# book_list=Book.objects.all()
# print(book_list[].name)
# print(book_list)
# for obj in book_list:
# print(obj.name)
# ()first last:调用者是queryset对象,返回值是对象
# book=Book.objects.all().first()
# book2=Book.objects.all().last()
# print(book)
# print(book2)
# () filter 返回值是queryset对象(相当于where语句)
# 可以加多个过滤条件
# book=Book.objects.filter(name='红楼梦').first()
# print(book)
# ()get方法 有且只有一个查询结果才有意义 返回值是一个对象
# book=Book.objects.get(name='红楼梦')
# print(book)
# 直接报错
# book = Book.objects.get(name='红楼梦eee')
# --------------最常用-----------------
# ()exclude 除了查询之外的 返回值也是queryset
# ret=Book.objects.exclude(name='红楼梦')
# print(ret)
# ()order_by(默认升序,加个- 就是降序),可以多个过滤条件调用者是queryset返回值也是queryset
# book_list=Book.objects.all().order_by('id')
# book_list=Book.objects.all().order_by('-id','price')
# print(book_list)
# ()count() 调用者是queryset,返回值是int
# ret=Book.objects.all().count()
# print(ret)
# ()exist()判断是是否有值,不能传参数,
# ret=Book.objects.all().exists()
# print(ret)
# ()values方法
# 查询所有书籍的名称(里面传的值,前提是表有这个字段)也是queryset但是里面放的是字典
'''
values原理
temp=[]
for obj in Book.objects.all():
temp.append({'name':obj.name})
'''
# ret=Book.objects.all().values('name')
# print(ret)
# 不加.all()也可以,调用是queryset返回值也是queryset
# ret=Book.objects.values('price')
# print(ret)
# ()value_list
# ret=Book.objects.all().values_list('price','name')
# print(ret)
# () distinct seletc * 的时候没有意义
# SELECT DISTINCT name from app01_book;
# 没有任何意义,不要这样么用
# Book.objects.all().distinct()
# ret=Book.objects.all().values('name').distinct()
# print(ret)
# 双下划线模糊查询-----------------------
# 查询价格大于100的书
# ret=Book.objects.filter(price__gt=)
# print(ret)
# 查询大于50小于100的书
# ret=Book.objects.filter(price__gt=,price__lt=)
# print(ret)
# 查询已红楼开头的书
# ret=Book.objects.filter(name__startswith='红楼')
# print(ret)
# 查询包含‘红’的书
# ret= Book.objects.filter(name__contains='红')
# print(ret)
# icontains 不区分大小写
# 价格在50,, 中的
# ret=Book.objects.filter(price__in=[,,])
# print(ret)
# 出版日期在2018年的
# ret=Book.objects.filter(pub_data__year=,pub_data__month=)
# print(ret)
# 删除,修改------------------------
# delete:调用者可以是queryset也可以是model对象
# 删除价格为188的书有返回值 (, {}) 删除的个数,那张表,记录数
# ret=Book.objects.filter(price=).delete()
# print(ret)
# ret=Book.objects.filter(price=).first().delete()
# print(ret)
# 修改 update只能queryset来调用 返回值为int
# ret=Book.objects.filter(name='红楼梦1').update(name='红楼梦')
# print(ret)
# 报错
# Book.objects.filter(name='红楼梦').first().update(name='红楼梦1')
# ret=Book.objects.filter(name='红楼梦1').first()
# print(ret.delete())
# aa=Publish.objects.filter(name='人民出版社')
# print(type(aa))
# aa.delete()
return HttpResponse('ok')
删除表纪录 删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如: model_obj.delete() 你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。 例如,下面的代码将删除 pub_date 是2005年的 Entry 对象: Entry.objects.filter(pub_date__year=).delete() 在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如: b = Blog.objects.) # This will delete the Blog and all of its Entry objects. b.delete() 要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用: Entry.objects.all().delete() 如果不想级联删除,可以设置为: pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True) 修改表纪录 Book.objects.filter(title__startswith=) 此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。
模糊查询
基于双下划线的模糊查询 Book.objects.filter(price__in=[,,]) Book.objects.filter(price__gt=) Book.objects.filter(price__lt=) Book.objects.filter(price__range=[,]) Book.objects.filter(title__contains="python") 精确查询 like binary %python% Book.objects.filter(title__icontains="python") 忽略大小写 like %python%
)
def search(request):
searchtype = request.POST.get("searchtype")
keyword = request.POST.get("keyword")
if searchtype == "all":
#多个字段模糊查询, 括号中的下划线是双下划线,双下划线前是字段名,双下划线后可以是icontains或contains,区别是是否大小写敏感,竖线是或的意思
sciencenews = models.Sciencenews.objects.filter(Q(title__icontains=keyword)\
|Q(content__icontains=keyword)|Q(author__icontains=keyword))
elif searchtype == "author":
#单个字段模糊查询
sciencenews = models.Sciencenews.objects.filter(author__icontains=keyword)
elif searchtype == "title":
sciencenews = models.Sciencenews.objects.filter(title__icontains=keyword)
elif searchtype == "content":
sciencenews = models.Sciencenews.objects.filter(content__icontains=keyword)
else:
#使用点连接的filter链表示and
sciencenews = models.Sciencenews.objects.filter(author__icontains=keyword).\
filter(title__icontains=keyword).filter(content__icontains=keyword)
return render(request,"show/index.html",{"param":sciencenews,"searchtype":searchtype,"keyword":keyword})
django中多个字段的模糊查询 使用Entity.objects.filter(name_contains='kris').filter(address='beijing') 这个方法是指名字包含kris,并且地址包含beijing的记录。 如果是不区分大小写,那么使用icontains替换contains. 如果要改成或的话,可以使用如下形式: Entity.objects.filter(Q(name_icontains='kris') | Q(address_icontains='beijing'))
#搜索功能
@csrf_exempt#使用@csrf_exempt装饰器,免除csrf验证
def search_testCaseApi(request):
if request.method == 'POST':
name = request.POST.get('task_name')
updateUser=request.POST.get('task_updateUser')
if name=="" and updateUser=="":
obj_all = tnw_test_case_api.objects.filter(del_flag=)
elif name!="" and updateUser=="":
obj_all = tnw_test_case_api.objects.filter(del_flag=,case_name__contains=name)
elif name=="" and updateUser!="":
obj_all = tnw_test_case_api.objects.filter(del_flag=,update_user__contains=updateUser)
else:
obj_all = tnw_test_case_api.objects.filter(del_flag=,case_name__contains=name,update_user__contains=updateUser)
ApiCasesList = []
for li in obj_all:
need_interfacename = allFunction().get_interfaceName(li.id)
api_list, api_sum = allFunction().testIDConnect_needid(li.id)
if li.case_module is not None:
ApiCasesList.append({
"testCaseApi_id": li.id,
"testCaseApi_name": li.case_name,
"testCaseApi_sum": api_sum,
"testCaseApi_version": li.case_version,
"testCaseApi_module": li.case_module,
"testCaseApi_need_interfacename": need_interfacename,
"testCaseApi_createTime": str(li.create_time),
"testCaseApi_updateTime": str(li.update_time),
"testCaseApi_updateUser": li.update_user,
})
else:
ApiCasesList.append({
"testCaseApi_id": li.id,
"testCaseApi_name": li.case_name,
,
"testCaseApi_version": li.case_version,
"testCaseApi_module": li.case_module,
"testCaseApi_need_interfacename": need_interfacename,
"testCaseApi_createTime": str(li.create_time),
"testCaseApi_updateTime": str(li.update_time),
"testCaseApi_updateUser": li.update_user,
})
# 将int类型使用dumps()方法转为str类型
ApiCasesList_len = json.dumps(len(ApiCasesList))
# 构造一个字典
json_data_list = {'rows': ApiCasesList, 'total': ApiCasesList_len}
# dumps()将字典转变为json形式,
easyList = json.dumps(json_data_list)
# 将json返回去,json的键值对中的键需要与前台的表格field=“X”中的X名称保持一致)
return HttpResponse(easyList)
用django的人经常会用到filter过滤集合的功能,这里对比下contains和icontains区别 queryset.filter(name__contains="e") queryset.filter(name__icontains="e") 打印一下这两行代码对应的sql语句就会看到区别 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 这其中的BINARY到底代表什么意思呢,答案是 精确大小写 而’icontains’中的’i’表示忽略大小写 举例: select * from plant where name like BINARY '%e%'; eee select * from plant where name like '%e%'; Ezs eee
contains查询
Entry.objects.get(headline__contains='Lennon')
Roughly translates to this SQL:
SELECT ... WHERE headline LIKE '%Lennon%';
icontains查询
q.exclude(body_text__icontains="food")
exact 查询
Entry.objects.get(headline__exact="Man bites dog")
iexact查询
Blog.objects.get(name__iexact="beatles blog")
Q查询:
from django.db.models import Q
Q(question__startswith='What')
Q(question__startswith='Who') | Q(question__startswith='What')
This is equivalent to the following SQL WHERE clause:
WHERE question LIKE 'Who%' OR question LIKE 'What%'
Q(question__startswith=)
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2018, 8, 8)) | Q(pub_date=date(, 8, ))
)
... roughly translates into the SQL:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2017-05-02' OR pub_date = '2009-05-06')
django ORM 增删改查 模糊查询 字段类型 及参数等的更多相关文章
- 饮冰三年-人工智能-Python-24 Django ORM增删改查
一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...
- Django框架(三)—— orm增删改查、Django生命周期
目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- ORM增删改查并发性能测试2
前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- Django框架(三)-- orm增删改查、Django生命周期
一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...
- Django 自带的ORM增删改查
通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...
- day054 组件 CBV FBV 装饰器 ORM增删改查
组件: 把一小段HTML 放在一个HTML中 nav.html 使用: {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...
- ORM增删改查
目录 orm django 连接mysql顺序 1 settings配置文件中 2 项目文件夹下的init文件中写上下面内容, 补充 3 models文件中创建一个类(类名就是表名) 4.执行数据库同 ...
随机推荐
- Ajax接收后台发送过来的布尔值以及指定的字符串
后台: aContext.getResponse().getWriter().println("" + result); 前端: $.ajax({ url:encodeURI(en ...
- pytest 单元测试
pytest简介 pytest 是python的一种单元测试框架,它非常的简洁.清晰. pytest 安装 pip install -U pytest 查看pytest版本 pytest --vers ...
- Ldap-crack-test?
ldap #!/bin/env python import sys import ldap ldapconn = ldap.initialize('ldap://domain.adserve.com' ...
- C++ CSTRINGLIST用法
CStringList类成员 构造 CStringList 构造一个空的CString对象列表 首/尾访问 GetHead 返回此列表(不能是空的)中头部的元素 GetTail 返回此列表(不能是 ...
- idea 新写的jsp没有找到
- mysql主从复制以及读写分离
之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...
- RPN(region proposal network)之理解
在faster-r-cnn 中,因为引入rpn层,使得算法速度变快了不少,其实rpn主要作用预测的是 “相对的平移,缩放尺度”,rpn提取出的proposals通常要和anchor box进行拟合回归 ...
- R语言-直方图
1.直方图 直方图和柱形图的区别:直方图表示频数,柱形图表示数量. 一般直方图的X轴表示取值范围,Y轴表示频数 hist() 函数 > hist(rnorm(1000)) #1000个正态随机数 ...
- Redis原子计数器incr
一.前言在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流量 ...
- Light Probe
[Light Probe] Light Probes provide a way to capture and use information about light that is passing ...