-------------------------动态URL、ORM操作-------------------------- 创建虚拟环境: https://blog.csdn.net/qq_43590972/article/details/89186236 创建项目分类App python manage.py startapp app02 配置python虚拟环境: 升级pip python -m pip install --upgrade pip 下载virtualenv: pip install virtualenv 安装virtualenv: pip install virtualenvwrapper-win 一个Project项目可以有多个app模块: 创建app模块: python manage.py startapp app01 app01: -admin.py Django自带的的后台管理相关配置 -apps.py -model.py 写类的,根据类创建数据库表 -tests.py 单元测试 # (多个views.py,可以创建views文件进行分类) -views.py 业务处理 3.ORM操作 http请求: url -> 视图(模板+数据) ORM操作表: 创建、修改、删除表 操作数据行: 增删改查 ORM利用三方工具连接数据库: Django默认连接SQLLite mysql默认: mysql -> MySQLDB() 1.修改配置文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'pyday70', # 要连接的数据库,连接前需要创建好 'USER': 'root', # 连接数据库的用户名 'PASSWORD': '123456', # 连接数据库的密码 'HOST': '127.0.0.1', # 连接主机,默认本级 'PORT': 3308, # 端口 默认3306 } } 2.将mysql默认连接修改为pymysql 在项目的初始化文件中加载(__init__.py): import pymysql pymysql.install_as_MySQLdb() -----------------------------------报错------------------------------ (报错1:django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual tha https://blog.csdn.net/xm_QUQ/article/details/101780159 setting.py—>DATABASES 添加 ‘OPTIONS’:{‘isolation_level’:None} 设置隔离级别 报错2:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1. https://blog.csdn.net/lvluobo/article/details/107850673 import pymysql # 指定版本 pymysql.version_info = (1, 4, 13, "final", 0) pymysql.install_as_MySQLdb() # 使用pymysql代替mysqldb连接数据库 报错3:Django:报错 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc) 原因:Django2.1不再支持MySQL5.5,必须5.6版本以上 https://www.cnblogs.com/yebaofang/p/9863678.html 解决办法: 二选一 (1)Django降级到2.0 pip install Django==2.0.0 -i https://pypi.douban.com/simple (2)MySQL升级 ) 三、models下创建和数据表对应的类 需要注册:INSTALLED_APPS注册上['app01'] 1. 创建数据库表: ************** 命令: ************** python manage.py makemigrations ************** python manage.py migrate 执行上面的语句是会在migrations下面生成py文件 -------------------------------------------------------------- class UserGroup(models.Model): title = models.CharField(max_length=32) class UserInfo(models.Model): # 设置自增长,主键 # nid = models.BigAutoField() # 可以自动生成id,可以不写 nid = models.AutoField(primary_key=True) username = models.CharField(max_length=64) password = models.CharField(max_length=32) # 增加一列的时候需要赋初值。null = True 或者 default=1 age = models.IntegerField(default=1) ''' 1、 # ug_id # Django2.0定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错: # TypeError: __init__() missing 1 required positional argument: 'on_delete' 2、关于别的属性的介绍 CASCADE: 这就是默认的选项,级联删除,你无需显性指定它。 PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。 SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank = True, null = True, 定义该字段的时候,允许为空。 SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。 SET(): 自定义一个值,该值当然只能是对应的实体了 ''' ug = models.ForeignKey("UserGroup", on_delete=models.SET_NULL, null=True, blank=True) 2. 在views模块的函数中对数据表进行CUDR操作 def sqlCRUDViews(request): # 导入models模块 from app01 import models # 增删改查 --------------1.增------------------ # models.UserGroup.objects.create(title='销售部') # 没有找到不会添加,也不会报错 # models.UserInfo.objects.create(username='root', password='pwd', ug_id=1) --------------2.查-------------- # groupList QuerySet对象(可迭代对象) <QuerySet [<UserGroup: UserGroup object (6)>]> # 里面是一个列表,通过遍历将数据拿出来 # groupList = models.UserGroup.objects.all() # 过滤,其他判定方式id__gt=1 id__lt=1 # groupList = models.UserGroup.objects.filter(id=1) -------------3.删除------------- # 注意在级联操作下,删除对数据表的影响 # 删除(先找到,然后删除) # models.UserGroup.objects.filter(id=1).delete() # 更新(先找到,然后更新) -------------4.更新-------------- # models.UserGroup.objects.filter(id=1).update(title='公关部') print(groupList) return render(request, 'sqlCRUD.html', {'groupList': groupList})