上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说
ORM又称关系对象映射,在ORM里,一张表就是一个类,一行数据就是类的一个对象
在Django中遵循code first的原则,即:根据代码中定义的类来自动生成数据库表
利用ORM来实现定义表,以及对表进行操作
注意:在连接数据库上,Django默认是连接MySQLdb的,但是在python3中,不是很完美的支持这个模块,所以创建的Django项目时,如果python版本为3时,则要在项目名下的init文件里加入下面的代码,如果运行过程中,报错no module named MySQLdb,那就是这个原因了
import pymysql
pymysql.install_as_MySQLdb()
另外,Django里的连接方式默认为连接sqllite,如果想切换成其他的连接方式,比如连接MySQL,只需要在配置文件里settings,注释之前的,重新配置新的即可
#默认数据库连接
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
#重新配置数据库连接
DATABASES = {
'default': {
#MySQL的数据库引擎
'ENGINE': 'django.db.backends.mysql',
'NAME':'django_com',
'USER':'root',
'PASSWORD':'',
}
}
注意:NAME数据库的名字,在mysql连接前,该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite则是在创建项目时自动创建的
pycharm也支持表格显示数据库数据
为了能更好的查看数据同步,我们可以直接用pycharm查看的,跳过第三方数据库操作软件Navicate,只需要在pycharm安装相应的数据库驱动即可,具体做法如下:
右侧栏-->Database--> + -->Data Source-->选择数据库驱动
点击download后,设置后数据名和用户名和密码,点击apply和ok,就可以了,直接可以在pycharm点击查看数据库表,如果你用的是sqlite数据库就更简单了,直接将sqlite拖动到Database就可以了
前奏说多了,接下来我看看怎么用ORM实现对数据的增删改查
首先我们必须创建表,那就要定义表类了,并且继承某个类,在Django中的要继承的类是models.Model
class UserInfo(models.Model):
name = models.CharField(max_length=24)
age = models.IntegerField()
sex = models.BooleanField(max_length=1,choices=((0,'男'),(1,'女'),))
email = models.EmailField()
home_adr = models.CharField(max_length=56)
def __str__(self):
return self.name
Django提供很多的字段,这些字段辅助form表单验证
接下来的是操作数据
增:create 和 对象.save
def create_data1(**kwargs):
ret = models.Author.objects.create(**kwargs)
def create_data2(**kwargs):
ob = models.Author(**kwargs)
ob.save()
删:delete
def delete_data(**kwargs):
models.Author.objects.filter(**kwargs).delete()
改:update
def update_data(**kwargs):
models.Author.objects.filter(**kwargs).update(name='laoliu')
查:all first get filter values
#取所有
def find_data_all(**kwargs):
r = models.UserInfo.objects.all()
return r
#取某一个,获取不到报错
def find_data_one(**kwargs):
r = models.UserInfo.objects.get(**kwargs)
return r
#取第一个
def find_data_first(**kwargs):
r = models.UserInfo.objects.first()
return r
#筛选条件查,多个对象
def find_data_filter(**kwargs):
r = models.UserInfo.objects.filter(**kwargs)
return r
#筛选字段查,多个对象
def find_data_value(*args):
r = models.UserInfo.objects.values(*args)
return r