python3 创建django项目和app应用、定义模型models

1.以管理权限运行cmd

2.选择django 项目路径 D:\python\django\

django-admin startproject mydjango      #django项目名称

3.创建django 项目

4.使用pycharm打开

5.创建python app
 

python manage.py startapp myapp     #app名称

6.在__init__.py 中加入

import pymysql
pymysql.install_as_MySQLdb()

7.在setting.py ----------配置 mysql

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   #默认sqlite3
        'NAME': 'michael',    #数据库名
        'USER': 'root',       #用户名
        'PASSWORD': '1111',   #数据库密码
        'HOST': 'localhost',  #数据库服务器ip
        'PORT': '3306',       # 数据库端口
    }
}

8.安装app,在setting.py里面添加

 

9.添加model,在myapp--->models.py

from django.db import models

# Create your models here.
class Grades(models.Model):
    gname = models.CharField(max_length=20)
    gdate = models.DateTimeField()
    ggirlnum = models.IntegerField()
    gboynum = models.IntegerField()
    isDelete = models.BooleanField(default=False)

class Students(models.Model):
    sname = models.CharField(max_length=20)
    sgender = models.BooleanField(default=True)
    sage = models.IntegerField()
    scontend = models.CharField(max_length=100)
    idDelete = models.BooleanField(default=False)
    #sgrade = models.ForeignKey('Grades', on_delete=models.CASCADE())  #报错1
    sgrade = models.ForeignKey('Grades', on_delete=models.CASCADE)
    
    

10.生成迁移文件,并执行

python manage.py makemigrations     #生成迁移文件
python manage.py migrate            #执行迁移文件

出错1:

    sgrade = models.ForeignKey('Grades')
TypeError: __init__() missing 1 required positional argument: 'on_delete'

解决方法:   把models.CASCADE()后边的括号去了

    #sgrade = models.ForeignKey('Grades', on_delete=models.CASCADE())  #报错1
    sgrade = models.ForeignKey('Grades', on_delete=models.CASCADE)

------------------------------------------------------------------------------------------------------------------------------------------

出错2:是因为 mysqlclient 目前不支持高版本python

  File "E:\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 36, in <module>
    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

解决方法: 打开python 安装目录,去除版本检查,如 E:\Python37\lib\site-packages\django\db\backends\mysql\base.py

version = Database.version_info
#if version < (1, 3, 13):
#    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

------------------------------------------------------------------------------------------------------------------------------------------ 

出错3:

  File "E:\Python37\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'

解决方法:   在E:\Python37\lib\site-packages\django\db\backends\mysql\operations.py文件里将query.decode改成query.encode

    def last_executed_query(self, cursor, sql, params):
        # With MySQLdb, cursor objects have an (undocumented) "_executed"
        # attribute where the exact query sent to the database is saved.
        # See MySQLdb/cursors.py in the source distribution.
        query = getattr(cursor, '_executed', None)
        if query is not None:
            #query = query.decode(errors='replace')
            query = query.encode(errors='replace')
        return query

若出现 No changes detected

解决方法:

python manage.py makemigrations --empty myapp

 执行成功图

查看数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值