一、web开发中的数据库操作
1、在web开发中,几乎都要涉及到数据库操作
2、web服务提供的数据,大部分是存储在数据库中的
3、数据的crud(create read update delete)操作,都需要数据库的支持
4、业界为数据存储专门提供了单独的数据库产品,满足各种数据存储的需求
二、现在数据库包括
1、关系型数据库,通常用sql语句进行数据操作 常见的有: mysql,oracle,postgresql(开源)
2、nosql(非关系型数据库) HBase, Cassandra,MongoDB,Redis
3、关系型数据库,目前最为常用的是开源数据库mysql,postgresql
4、服程序使用相应的客户端连接库访问DB server
5、本课程使用另一种更简单的数据库(sqlite),没有数据库服务,数据操作被做成库,python内置了sqlite的操作库
6、Django ORM (object relational mapping)技术,简化了数据库开发的逻辑,提供了开发的效率,屏蔽了不同的数据库访问的底层细节,切换数据库时,不需要改动代码,只需要配置改改
三、Django的数据库设置
1、在 settings.py中定义
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
ENGINE是说明使用的数据库的索引
NAME是具体数据库的名字,可以改
2、定义数据库表的文件
数据库表的定义,一般是放在应用的models.py中的
还需要在配置文件ci/settings.py中,加入我们的应用
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'dandan' ]
migrate命令: python manage.py migrate
由于django提供了ORM这种数据库的操作方式,都是通过高层的面向对象的开发,屏蔽了底层数据库操作的细节,不需要定义sql语句,只需要在应用的models.py下面定义一个类就行了
为什么要定义在models.py下面
MVC模式,model-view-controller 模型 视图 控制器
三者的分工:model是用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,封装和处理数据用的
view 展示数据用的
controller 控制业务逻辑用的
# 课程 class Course(models.Model): #课程名 name = models.CharField(max_length=100) #课程描述 desc = models.CharField(max_length=2000, null=True, blank=True) #展示优先级 display_idx = models.PositiveSmallIntegerField(default=0) class Meta: db_table = "dan_course" dan前缀的作用把name字段定义成类的静态属性,是个CharField字符串,positiveSmallTnterger,最小正整数,positive是正数的意思,其他的表
的字段类型可以查找django的文档 https://docs.djangoproject.com,最好看中文文档
可以为空要填null = true,空格blank= True表示空格也是对的,空字符串和空不同,空字符串也有数据
default是课程描述的意思,
Meta定义的类的其他信息
django中很少创建表,都是通过orm系统去做
只在models.py中定义这个表还不行,得在setting.py中的INSTALLED_APPS中加进去
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'dan' ]接下来去创建这张表
产生相应的数据操作脚本
python manage.py makemigrations dan
执行数据操作脚本
python manage.py migrate
如果修改model,再次执行 ,两个命令都要执行
主流数据库的配置
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.mysql', 'NAME':'', 'USER':'XXX', 'PASSWORD':'XXX', 'HOST':'', 'PORT':'', 'CONN_MAX_AGE':0, 'OPTIONS':{ "init_command":"SET storage_engine=INNODB" } } }