上次我们讲完了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