ORM查询等操作

基础查询13条

<1> all(): 查询所有结果

<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象

<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象

<5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列

<6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

<7> order_by(*field): 对查询结果排序

<8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。

<9> distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)

<10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。

<11> first(): 返回第一条记录

<12> last(): 返回最后一条记录

<13> exists(): 如果QuerySet包含数据,就返回True,否则返回False

结果ret可以.query得到原sql语句

返回QuerySet对象的方法有

all()

filter()

exclude()

order_by()

reverse()

distinct()

特殊的QuerySet

values()       返回一个可迭代的字典序列

values_list() 返回一个可迭代的元祖序列

返回具体对象的

get()

first()

last()

返回布尔值的方法有:

exists()

返回数字的方法有

count()

下划线过滤查找

    # 查询id值大于1小于4的结果ret = models.Person.objects.filter(id__gt=1, id__lt=4)print(ret)# in# 查询 id 在 [1, 3, 5, 7]中的结果ret = models.Person.objects.filter(id__in=[1, 3, 5, 7])print(ret)# 查询 id不在 [1, 3, 5, 7]中的结果ret = models.Person.objects.exclude(id__in=[1, 3, 5, 7])print(ret)# range# 判断id值在 哪个区间的 SQL语句中的between and  1<= x <=3ret = models.Person.objects.filter(id__range=[1, 3])print(ret)# contains 字段包含指定值的# icontains 忽略大小写包含指定值ret = models.Person.objects.filter(name__contains="小")print(ret)# 日期和时间字段还可以有以下写法ret = models.Person.objects.filter(birthday__year=2000)print(ret)ret = models.Person.objects.filter(birthday__year=2000, birthday__month=5)print(ret)# 查询书名以沙河开头的书的对象models.Book.objects.filter(title__startswith="沙河")# 查询书名以沙河结尾的书的对象models.Book.objects.filter(title__endswith="沙河")# 类似的还有:istartswith, iendswith 

  还有__set反向查找,下面介绍

foreignerkey 正向与反向查找

这里有两个表结构的模型语句

class Publisher(models.Model):id = models.AutoField(primary_key=True)name = models.CharField(max_length=32, unique=True)def __str__(self):return "我是一个出版社对象:{}".format(self.name)class Book(models.Model):id = models.AutoField(primary_key=True)price = models.DecimalField(max_digits=5, decimal_places=2, default=99.99)# 库存数kucun = models.IntegerField(default=1000)# 卖出数maichu = models.IntegerField(default=0)title = models.CharField(max_length=32)# 外键publisher = models.ForeignKey(to="Publisher",on_delete=models.CASCADE,related_name="books",  # related_name="books" 反向查询是用来代替基于对象查找表名(book_set)的related_query_name="xxoo",  # related_query_name="xxoo" 反向查询是用来替代基于下划线查找时的表名的null=True)

foreignerkey的正向查找

正向查找时从定义外键的表通过外键找到要链接的表的信息

基于对象查找

book_obj = models.Book.objects.first()  # 第一本书对象
print(book_obj.publisher)  # 得到这本书关联的出版社对象
print(book_obj.publisher.name)  # 得到出版社对象的名称

基于下划线查找

print(models.Book.objects.values_list("publisher__name"))

foreignerkey的反向查找

反向查找是从当前表找到引用自己当外键的表中的信息

基于对象查找

publisher_obj = models.Publisher.objects.first()  # 找到第一个出版社对象
books = publisher_obj.book_set.all()  # 找到第一个出版社出版的所有书
titles = books.values_list("title")  # 找到第一个出版社出版的所有书的书名

  使用基于对象查找时,前提是对象,其次,模板里的类定义不能有related_name和related_query_name,两种方式不能并存,会报错

基于下划线查找(用到related_query_name和related_name)

print(models.Publisher.objects.filter(id=1).values_list("xxoo__title"))  # related_query_name
print(models.Publisher.objects.get(id=2).books.first())  # related_neme

  注意:使用related_name时,前面的还是对象,但是使用related_query_name时,前面要是queryset

ManyToManyField的反向查找

ManyToManyField的反向查找和上面的类似,也分为基于对象查找和基于下划线查找

基于对象查找

print(models.Book.objects.get(id=2).author_set.all())

  使用基于对象查找时,前提是对象,其次,模板里的类定义不能有related_name和related_query_name,两种方式不能并存,会报错

 基于下划线查找(用到related_query_name和related_name)

    print(models.Book.objects.get(id=2).back_author.all())print(models.Book.objects.filter(id=2).values_list("back_authors__name"))

  表结构如下

# 书类
class Book(models.Model):id = models.AutoField(primary_key=True)# 创建一个varchar(64)的唯一的不为空的字段tittle = models.CharField(max_length=64, null=False, unique=True)# 和出版者关联的外键字段publisher = models.ForeignKey(to="Publisher", related_name="books", related_query_name="bookss")  # 设置书籍连接到出版者的外键# 数据库自动生成的外键会自动加上_iddef __str__(self):return "<Book object>: {}".format(self.tittle)# 作者类
class Author(models.Model):id = models.AutoField(primary_key=True)  # 自增的ID主键name = models.CharField(max_length=16, null=False, unique=True)book = models.ManyToManyField(to="Book", related_name="back_author", related_query_name="back_authors")  # 创建作者表和书籍表多对多的关系# 多对多的关系会在数据库中另创建一个新的对应关系表,只存放id的对应关系def __str__(self):return "<Author object>: {}".format(self.name)

ManyToManyField

class RelatedManager

"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。

它存在于下面两种情况:

  1. 外键关系的反向查询
  2. 多对多关联关系

简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。

方法

  • create()

创建一个新的对象,保存对象(会自动保存),并将它添加到关联对象集之中,返回新创建的对象,例如通过作者对象创建book对象

>>> import datetime
>>> models.Author.objects.first().book_set.create(title="番茄物语", publish_date=datetime.date.today())

  做了两件事,在book表里面创建了一本新书,和在作者和书的关系表中添加关联记录

add()

把指定的model对象添加到关联对象集中。

添加对象(添加了一行记录或者多行)

>>> author_objs = models.Author.objects.filter(id__lt=3)
>>> models.Book.objects.first().authors.add(*author_objs)

添加id

>>> models.Book.objects.first().authors.add(*[1, 2])

set()

更新model对象的关联对象。

>>> book_obj = models.Book.objects.first()
>>> book_obj.authors.set([2, 3])

remove()

从关联对象集中移除执行的model对象

>>> book_obj = models.Book.objects.first()
>>> book_obj.authors.remove(3)

clear()

从关联对象集中移除一切对象。

>>> book_obj = models.Book.objects.first()
>>> book_obj.authors.clear()

注意:

对于ForeignKey对象,clear()和remove()方法仅在null=True时存在。

举个例子:

ForeignKey字段没设置null=True时,

class Book(models.Model):title = models.CharField(max_length=32)publisher = models.ForeignKey(to=Publisher)

没有clear()和remove()方法:

>>> models.Publisher.objects.first().book_set.clear()
Traceback (most recent call last):File "<input>", line 1, in <module>
AttributeError: 'RelatedManager' object has no attribute 'clear'

当ForeignKey字段设置null=True时,

class Book(models.Model):name = models.CharField(max_length=32)publisher = models.ForeignKey(to=Class, null=True)

此时就有clear()和remove()方法:

>>> models.Publisher.objects.first().book_set.clear()

注意:

  • 对于所有类型的关联字段,add()、create()、remove()和clear(),set()都会马上更新数据库。换句话说,在关联的任何一端,都不需要再调用save()方法。

QuerySet方法大全

##################################################################
# PUBLIC METHODS THAT ALTER ATTRIBUTES AND RETURN A NEW QUERYSET #
##################################################################def all(self)# 获取所有的数据对象def filter(self, *args, **kwargs)# 条件查询# 条件可以是:参数,字典,Qdef exclude(self, *args, **kwargs)# 条件查询# 条件可以是:参数,字典,Qdef select_related(self, *fields)性能相关:表之间进行join连表操作,一次性获取关联的数据。总结:1. select_related主要针一对一和多对一关系进行优化。2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。def prefetch_related(self, *lookups)性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。总结:1. 对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化。2. prefetch_related()的优化方式是分别查询每个表,然后用Python处理他们之间的关系。def annotate(self, *args, **kwargs)# 用于实现聚合group by查询from django.db.models import Count, Avg, Max, Min, Sumv = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id'))# SELECT u_id, COUNT(ui) AS `uid` FROM UserInfo GROUP BY u_idv = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id')).filter(uid__gt=1)# SELECT u_id, COUNT(ui_id) AS `uid` FROM UserInfo GROUP BY u_id having count(u_id) > 1v = models.UserInfo.objects.values('u_id').annotate(uid=Count('u_id',distinct=True)).filter(uid__gt=1)# SELECT u_id, COUNT( DISTINCT ui_id) AS `uid` FROM UserInfo GROUP BY u_id having count(u_id) > 1def distinct(self, *field_names)# 用于distinct去重models.UserInfo.objects.values('nid').distinct()# select distinct nid from userinfo注:只有在PostgreSQL中才能使用distinct进行去重def order_by(self, *field_names)# 用于排序models.UserInfo.objects.all().order_by('-id','age')def extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None)# 构造额外的查询条件或者映射,如:子查询Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))Entry.objects.extra(where=['headline=%s'], params=['Lennon'])Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])def reverse(self):# 倒序models.UserInfo.objects.all().order_by('-nid').reverse()# 注:如果存在order_by,reverse则是倒序,如果多个排序则一一倒序def defer(self, *fields):models.UserInfo.objects.defer('username','id')或models.UserInfo.objects.filter(...).defer('username','id')#映射中排除某列数据def only(self, *fields):#仅取某个表中的数据models.UserInfo.objects.only('username','id')或models.UserInfo.objects.filter(...).only('username','id')def using(self, alias):指定使用的数据库,参数为别名(setting中的设置)##################################################
# PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #
##################################################def raw(self, raw_query, params=None, translations=None, using=None):# 执行原生SQLmodels.UserInfo.objects.raw('select * from userinfo')# 如果SQL是其他表时,必须将名字设置为当前UserInfo对象的主键列名models.UserInfo.objects.raw('select id as nid from 其他表')# 为原生SQL设置参数models.UserInfo.objects.raw('select id as nid from userinfo where nid>%s', params=[12,])# 将获取的到列名转换为指定列名name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'}Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)# 指定数据库models.UserInfo.objects.raw('select * from userinfo', using="default")################### 原生SQL ###################from django.db import connection, connectionscursor = connection.cursor()  # cursor = connections['default'].cursor()cursor.execute("""SELECT * from auth_user where id = %s""", [1])row = cursor.fetchone() # fetchall()/fetchmany(..)def values(self, *fields):# 获取每行数据为字典格式def values_list(self, *fields, **kwargs):# 获取每行数据为元祖def dates(self, field_name, kind, order='ASC'):# 根据时间进行某一部分进行去重查找并截取指定内容# kind只能是:"year"(年), "month"(年-月), "day"(年-月-日)# order只能是:"ASC"  "DESC"# 并获取转换后的时间- year : 年-01-01- month: 年-月-01- day  : 年-月-日models.DatePlus.objects.dates('ctime','day','DESC')def datetimes(self, field_name, kind, order='ASC', tzinfo=None):# 根据时间进行某一部分进行去重查找并截取指定内容,将时间转换为指定时区时间# kind只能是 "year", "month", "day", "hour", "minute", "second"# order只能是:"ASC"  "DESC"# tzinfo时区对象models.DDD.objects.datetimes('ctime','hour',tzinfo=pytz.UTC)models.DDD.objects.datetimes('ctime','hour',tzinfo=pytz.timezone('Asia/Shanghai'))"""pip3 install pytzimport pytzpytz.all_timezonespytz.timezone(‘Asia/Shanghai’)"""def none(self):# 空QuerySet对象####################################
# METHODS THAT DO DATABASE QUERIES #
####################################def aggregate(self, *args, **kwargs):# 聚合函数,获取字典类型聚合结果from django.db.models import Count, Avg, Max, Min, Sumresult = models.UserInfo.objects.aggregate(k=Count('u_id', distinct=True), n=Count('nid'))===> {'k': 3, 'n': 4}def count(self):# 获取个数def get(self, *args, **kwargs):# 获取单个对象def create(self, **kwargs):# 创建对象def bulk_create(self, objs, batch_size=None):# 批量插入# batch_size表示一次插入的个数objs = [models.DDD(name='r11'),models.DDD(name='r22')]models.DDD.objects.bulk_create(objs, 10)def get_or_create(self, defaults=None, **kwargs):# 如果存在,则获取,否则,创建# defaults 指定创建时,其他字段的值obj, created = models.UserInfo.objects.get_or_create(username='root1', defaults={'email': '1111111','u_id': 2, 't_id': 2})def update_or_create(self, defaults=None, **kwargs):# 如果存在,则更新,否则,创建# defaults 指定创建时或更新时的其他字段obj, created = models.UserInfo.objects.update_or_create(username='root1', defaults={'email': '1111111','u_id': 2, 't_id': 1})def first(self):# 获取第一个def last(self):# 获取最后一个def in_bulk(self, id_list=None):# 根据主键ID进行查找id_list = [11,21,31]models.DDD.objects.in_bulk(id_list)def delete(self):# 删除def update(self, **kwargs):# 更新def exists(self):# 是否有结果

聚合查询和分组查询

聚合(聚合函数)

aggregate()QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。

键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。

用到的内置函数:

from django.db.models import Avg, Sum, Max, Min, Count

示例:

>>> from django.db.models import Avg, Sum, Max, Min, Count>>> models.Book.objects.all().aggregate(Avg("price"))
{'price__avg': 13.233333}

如果你想要为聚合值指定一个名称,可以向聚合子句提供它。

>>> models.Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 13.233333}

如果你希望生成不止一个聚合,你可以向aggregate()子句中添加另一个参数。所以,如果你也想知道所有图书价格的最大值和最小值,可以这样查询:

>>> models.Book.objects.all().aggregate(Avg("price"), Max("price"), Min("price"))
{'price__avg': 13.233333, 'price__max': Decimal('19.90'), 'price__min': Decimal('9.90')}

分组

我们在这里先复习一下SQL语句的分组。

假设现在有一张公司职员表:

我们使用原生SQL语句,按照部分分组求平均工资:

select dept,AVG(salary) from employee group by dept;

ORM查询:

from django.db.models import Avg
Employee.objects.values("dept").annotate(avg=Avg("salary").values(dept, "avg")

连表查询的分组:

SQL查询:

select dept.name,AVG(salary) from employee inner join dept on (employee.dept_id=dept.id) group by dept_id;

ORM查询:

from django.db.models import Avg
models.Dept.objects.annotate(avg=Avg("employee__salary")).values("name", "avg")

更多示例:

示例1:统计每一本书的作者个数

>>> book_list = models.Book.objects.all().annotate(author_num=Count("author"))
>>> for obj in book_list:
...     print(obj.author_num)
...
2
1
1

示例2:统计出每个出版社买的最便宜的书的价格

>>> publisher_list = models.Publisher.objects.annotate(min_price=Min("book__price"))
>>> for obj in publisher_list:
...     print(obj.min_price)
...
9.90
19.90

方法二:

>>> models.Book.objects.values("publisher__name").annotate(min_price=Min("price"))
<QuerySet [{'publisher__name': '沙河出版社', 'min_price': Decimal('9.90')}, {'publisher__name': '人民出版社', 'min_price': Decimal('19.90')}]>

示例3:统计不止一个作者的图书

>>> models.Book.objects.annotate(author_num=Count("author")).filter(author_num__gt=1)
<QuerySet [<Book: 番茄物语>]>

示例4:根据一本图书作者数量的多少对查询集 QuerySet进行排序

>>> models.Book.objects.annotate(author_num=Count("author")).order_by("author_num")
<QuerySet [<Book: 香蕉物语>, <Book: 橘子物语>, <Book: 番茄物语>]>

示例5:查询各个作者出的书的总价格

>>> models.Author.objects.annotate(sum_price=Sum("book__price")).values("name", "sum_price")
<QuerySet [{'name': '小精灵', 'sum_price': Decimal('9.90')}, {'name': '小仙女', 'sum_price': Decimal('29.80')}, {'name': '小魔女', 'sum_price': Decimal('9.90')}]>

F查询和Q查询

F查询

在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。如果我们要对两个字段的值做比较,那该怎么做呢?

Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

示例1:

查询评论数大于收藏数的书籍(使用时要先导入F

from django.db.models import F
models.Book.objects.filter(commnet_num__gt=F('keep_num'))

Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。

models.Book.objects.filter(commnet_num__lt=F('keep_num')*2)

修改操作也可以使用F函数,比如将每一本书的价格提高30元(只有queryset才有update)

models.Book.objects.all().update(price=F("price")+30)

引申:

如果要修改char字段咋办?

如:把所有书名后面加上(第一版)————记得要导入Concat

>>> from django.db.models.functions import Concat
>>> from django.db.models import Value
>>> models.Book.objects.all().update(title=Concat(F("title"), Value("("), Value("第一版"), Value(")")))

Q查询

filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象

示例1:

查询作者名是小仙女或小魔女的

models.Book.objects.filter(Q(authors__name="小仙女")|Q(authors__name="小魔女"))

你可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询。

示例:查询作者名字是小仙女并且不是2018年出版的书的书名。

>>> models.Book.objects.filter(Q(author__name="小仙女") & ~Q(publish_date__year=2018)).values_list("title")
<QuerySet [('番茄物语',)]>

查询函数可以混合使用Q 对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。

例如:查询出版年份是2017或2018,书名中带物语的所有书。

>>> models.Book.objects.filter(Q(publish_date__year=2018) | Q(publish_date__year=2017), title__icontains="物语")
<QuerySet [<Book: 番茄物语>, <Book: 香蕉物语>, <Book: 橘子物语>]>

extra执行原生sql

extra(select None,where None,params None,tables None,order_by None,select params None)

有些情况下,Django的查询语法难以简单的表达复杂的WHERE子句,对于这种情况,Django提供了extra()Queryset修改机制
extra可以指定一个或多个参数,例如select,where or tables.这些参数都不是必须的,但是你至少要使用一个!要注意这些
参数之select
The select 参数可以让你在SELECT从句中添加其他字段信息,它应该是一个字典,存放着属性名到SQL从句的映射。

queryResult = models.Article.0bjects.extra(select = "is_recent":"create time > '2017-09-05'")

结果集中每一个Entry对象都有一个额外的属性is_recent,它是一个布尔值,表示Article对象的create_time 是否晚于2017-09-05
练习:

in sqlite:article_obj=models.Article.objects.extra(select={"standard_time":"strftime('%%Y-%%m-%%d',create_time)"}).values("standard-time","nid","title")print(article_obj)
#<Queryset [{'title':'MongoDb 入门教程',‘standard_time:'2017-09-03','nid':1}]>

  

转载于:https://www.cnblogs.com/wlx97e6/p/9873940.html

Django学习笔记7相关推荐

  1. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  2. 分享:Django学习笔记(4)---ManyToMany 添加、删除关联、查询

    Django学习笔记(4)---ManyToMany 添加.删除关联.查询 http://my.oschina.net/u/572994/blog/105280

  3. django学习笔记03

    原创博客地址:django学习笔记03 第一章,模型层 查询集API 一.QuerySet何时被提交 迭代 QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询 切片:如果使用切片的&q ...

  4. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  5. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  6. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  7. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  8. Django学习笔记(五)

    Django学习笔记(五) MVC和MTV对比 传统的MVC(Model-View-Controller) M 模型层,主要是对数据库层的封装 V 视图层,向用户展示结果 C 控制层,用于请求,获取数 ...

  9. 梅科尔工作室-Django学习笔记(二次学习)(3)

    本次学习的是如何用django实现前端鸿蒙OS登录 下面介绍一下本次的操作过程. 1.首先创立MySQL数据并将数据库导入到django当中 其中:导入数据库的操作: 2.配置urls 对应新建的pe ...

  10. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

最新文章

  1. PHP最简单写文件记日志当前时间
  2. SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题
  3. EXECL使用技巧(转)
  4. Linux dmesg命令
  5. Mac安装nginx配置过程
  6. python 读取excel太慢_Python 读取excel并转换为字典
  7. 华为畅享max有没有人脸识别_华为畅享7s有人脸识别吗 让我来告诉你
  8. JavaScript 简介
  9. 使用GridFS上传下载图片以及其他文件
  10. iOS常用的第三方类库
  11. c++ opencv 通过网络连接工业相机_使用OpenCV进行手势控制游戏+源码分享
  12. Markdow简单介绍
  13. 自学如何去学习jQuery
  14. 高速公路坐标高程计算软件3.6版本发布
  15. TransE算法原理与案例
  16. 计算机音乐公子,抖音公子在等谁是什么梗 公子在等谁背景音乐《心机》
  17. xshell删除文件夹命令_xshell 常用命令整理
  18. java 移动目录_java 移动文件夹内的文件,从一个目录移动到另外一个目录
  19. Unity小游戏之闯关小游戏
  20. php处理微信消息,微信开发之处理微信客户端发来的消息

热门文章

  1. python撤销_python 取消转义字符作用
  2. Vue 事件绑定 事件修饰符 条件判断 循环遍历
  3. 嵌入式系统——电子设计
  4. Hive union vs union all
  5. Hive数据导出入门
  6. stm32f10x系列.s汇编启动文件
  7. 自动化测试基础篇--Selenium发送测试报告邮件
  8. Elasticsearch之sense插件的安装(图文详解)
  9. TCP连接建立与释放
  10. SpringBoot+MyBatis启动报错java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal