其实许多web框架都是用的pymysql来连接控制数据库,但Django还提供了ORM的数据库操作办法(本质也是pymysql);两种方式皆可,但我们有必要去学一下ORM
- 不再关注用的是
mysql、oracle...等.- 通过简单的配置就可以轻松更换数据库, 而不需要修改代码.
ORM操作:
http请求:
url -> 视图(模板+数据)
ORM操作表:
创建表、修改表、删除表
操作数据行:
增删改查
ORM利用pymysql等第三方工具连接数据库
默认sqlite
默认:mysql -> MYSQLDB(修改django默认连接mysql的方式

默认setting文件这样设置的:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
我们需要修改成如下配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
# 如下设置放置的与project同名的配置的 __init__.py文件中
# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替 import pymysql pymysql.install_as_MySQLdb()
要是出现这个bug这样修复--> django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
总结准备步骤就是:
- 创建数据库
- 修改setting文件
- 修改__init__.py文件引入pymysql
接下来就创建一个类,让类给咱们生成表:
在app01文件夹里的models.py修改:
from django.db import models
#创建表、列(id\nid...
class UserInfo(models.Model):
nid = models.BigAutoField(primary_key=True) #这行不写Django默认会自动创建id并且是自增主键,所以以后可以不用写这行了!
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
那如何让class给咱创建表呢?..再去setting里注册上app01:

# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01'
]
最后就要放大招:生成表!这两命令记在骨髓里!!!
#要是你app里没有migrations文件先要生成下! #python manage.py makemigrations --empty app01 python manage.py makemigrations python manage.py migrate
看它一一下子除了我们自己的表还有很多表,这些表其实与Django自带的那个后台有关:

假如以后你想在class里修改表名,请直接修改,再执行一次“骨髓命令”就行!有数据也没关系!
假如以后你想在加一列age = models.IntegeField(),直接加就行,但是....
若原表中有数据了,只要指定age = models.IntegeField(null=True)或者age = models.IntegeField(default=xxx)
若创建一对多等关系就例如 ug = models.ForeignKey("UserGroup",null=True) #生成是外键 ug_id
数据库相关操作:增删改查
#test可删
def test(requst):
from app01 import models
#新增
models.UserInfo.objects.create(username='shannon',password='111111')
#查找
#userinfo QuerySet类型(列表)[obj,obj,obj]
userinfo = models.UserInfo.objects.all()
for row in userinfo:
print(row.nid,row.username)
#加条件的查找filter()
# ,是and ; id__gt=1 是id大于1;id__lt=1 是id小于1
userinfo = models.UserInfo.objects.filter(nid=2,username='shannon')
#删除,删前得先找到~
models.UserInfo.objects.filter(nid=1).delete()
#更新
models.UserInfo.objects.filter(nid=4).update(password='123')
return HttpResponse('成功')
实施
来源:https://www.cnblogs.com/ethtool/p/12171368.html
