ORM
ORM是Object Relation mappiong,简单来说就是将编程语言中的对象映射到数据库中。这边的对象就是数据库中的各种表,ORM模型作用在于编程人员更换数据库引擎时,不必每次
重新编写sql语句,只要通过编程语言自动生成对应的sql语句,这样大大地提升了效率。
python下的ORM:在应用目录下的models下可以编写要映射到数据库的表,格式如下
class Book(models.Model): id = models.AutoField(primary_key=True) #auto为自增型 title = models.CharField(max_length=32) #char为字符型 state = models.BooleanField() #Boolean为布尔型 pub_data = models.DateField() #Date为日期型 price = models.DecimalField(max_digits=8,decimal_places=2) #Decimal为十进制小数 publish = models.CharField(max_length=32)
其中数据类型和mysql很多相似,只是语法变了。
django引入ORM时,要在主目录下的_init__文件下写入:
import pymysql pymysql.install_as_MySQLdb()
因为django默认的数据库驱动为MySQLdb,python3与其兼容有问题,所以要是用pymysql作为驱动。
同时主目录下settings文件中的databases属性要改为:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',#引擎驱动 'NAME': 'orm', #数据库名 'USER': 'root', #用户名 'password': '', #密码 'HOST': '127.0.0.1', #ip 'port': 3306, #端口号 } }
注意事项:python3.4以上版本和django2.0以上版本共同使用时,会报错。因为MySQLclient只支持到python3.4,所以要将项目下的报错的目录,Lib\site-packages\django\db\backends\mysql\中的如下代码注释。
if version < (1, 3, 13): raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
然后使用python(python3) manage.py makemigrations:
再使用python manage.py migrate:
最后在mysql数据库中可以看到新建的表:
产生了一个app01_book的表,还有一些其他自动生成的很多表。其中app01_book的字段:
最后如果想在控制台看到ORM将类转换为sql语句的过程,可以在settings文件下加上:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
一、单表操作
当model下创建了表类时,在views下可以控制表的操作
(1)添加
def index(request): #添加记录 # 方式1: # book_obj = Book(id=1,title='pythonredbook',state=True,price=100,pub_data='1019-6-28', # publish='cn') # book_obj.save() # 方式2:create返回的就是对象记录 Book.objects.create(title='linux',state=False,price=88,pub_data='2020-6-28' ,publish='ua') return HttpResponse('ok')
在mysql数据里可以看到创建的表记录
(2)查询和模糊查询
(3)删除
(4)修改
二、