Django 同步Mysql
Django结合Mysql进行开发指导
1、在models.py中建立一个class
1 |
|
2、配置settings.py
1 |
|
3、同步数据库
1 |
|
同步之后,django会根据我们在modles中的class建立一个表,比如people_person
4、对表进行操作
1 |
|
记得修改models
1
2
3
4
5
6class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()
def __unicode__(self):
return self.name
1、一步到位
1 |
|
2、分2个步骤进行
1 |
|
3、面向对象
1 |
|
4、get_or_create
方法
1 |
|
这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
6、获取单个对象有以下方法
1、Person.objects.all()
获取所有
1
2
3>>> Person.objects.all()
[<Person: WeizhongTu>, <Person: AA>, <Person: BB>, <Person: cc>, <Person: QQE>,
<Person: qq>, <Person: WZT>]
1 |
|
3、Person.objects.get(name=name)
get
是用来获取一个对象的,必须严格符合条件才行。
4、Person.objects.filter()
如果需要获取满足条件的一些人,就要用到 filter
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") # 名称严格等于 "abc" 的人,区分大小写。
Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件。
[<Person: ABC>]
Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人,且abc区分大小写。
Person.objects.filter(name__contains="q")
[<Person: qq>]
Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写。
Person.objects.filter(name__icontains="q")
[<Person: QQE>, <Person: qq>]
Person.objects.filter(name__regex="^abc") # 正则表达式查询
Person.objects.filter(name__regex="T$")
[<Person: WZT>]
Person.objects.filter(name__regex="^q")
[<Person: qq>]
Person.objects.filter(name__iregex="^abc")# 正则表达式不区分大小写
Person.objects.filter(name__iregex="^q")
[<Person: QQE>, <Person: qq>]exclude
。
1 |
|
7、获取到数据库的所有对象
QuerySet 是查询到数据库的所有对象
1、Person.objects.all()
QuerySet 是查询所有的 Person条目。 1
2
3
4
5
6
7
8
9
10
11
12
13>>> from people.models import Person
>>> es = Person.objects.all()
>>> for e in es: # 可迭代
... print e
...
WeizhongTu
AA
BB
cc
QQE
qq
WZT
AABPerson.objects.all().exists()
。 1
2>>> Person.objects.all().exists()
TruePerson.objects.all()[:6]
取出6条,可以节省内存。
1
2
3>>> Person.objects.all()[:6]
[<Person: WeizhongTu>, <Person: AA>, <Person: BB>, <Person: cc>, <Person: QQE>,
<Person: qq>]1
2
3
4>>> len(es)
8
>>> Person.objects.count()
81
2
3
4
5>>> list(es)
[<Person: WeizhongTu>, <Person: AA>, <Person: BB>, <Person: cc>, <Person: QQE>,
<Person: qq>, <Person: WZT>, <Person: AAB>]
>>> type(es)
<class 'django.db.models.query.QuerySet'>
作者按照名称排序 1
2
3
4>>> Author.objects.all().order_by('name')
[<Author: Wei>, <Author: WeizhongTu>]
>>> Author.objects.all().order_by('-name')
[<Author: WeizhongTu>, <Author: Wei>]1
2>>> Person.objects.filter(name__contains="A").exclude(age=12)
[<Person: AA>]
8、 QuerySet 重复的问题
使用 QuerySet.distinct()
去重
一般的情况下,QuerySet 中不会出来重复的,重复是很罕见的,但是当跨越多张表进行检索后,结果并到一起,可以会出来重复的值
1
2
3
4
5
6
7
8
9qs1 = Pathway.objects.filter(label__name='x')
qs2 = Pathway.objects.filter(reaction__name='A + B >> C')
qs3 = Pathway.objects.filter(inputer__name='WeizhongTu')
# 合并到一起,这个时候就有可能出现重复的。
qs = qs1 | qs2 | qs3
# 去重方法
qs = qs.distinct()
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!