Django2+MySQL5.7 创建第一个简单的app项目

本教程介绍了如何在Django2中创建并配置使用MySQL5.7的第一个项目。首先,通过pip安装django2.2.3,然后创建项目和app,设置urls.py及INSTALLED_APPS。接着,连接MySQL数据库,解决Django2在Python3环境下迁移数据库和调用pymysql时遇到的问题。最后,成功运行项目并展示结果。
摘要由CSDN通过智能技术生成

创建项目

以下是命令行创建python项目的指南,如果是使用pycharm创建的django工程则从创建工程开始,命令行即Terminal的虚拟环境,命令不需要做任何改变

创建第一个项目

安装django

pip install django==2.2.3

命令行进入指定的文件目录,创建工程(xxxx为项目名称)

django-admin startproject xxxx

命令行进入工程目录(xxxx为项目名称)

cd xxxx

创建app(yyyy为项目名称)

python manage.py startapp yyyy

此时整个目录结构如下

tree

xxxx/
  yyyy/
    migrations/
      _init_.py
    _init_.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py
  xxxx/
    _init_.py
    settings.py
    urls.py
    wsgi.py
  manage.py

配置 urls.py (路由)

修改工程目录xxxx/xxxx下的 urls.py

from django.urls import path,include
urlpatterns = [
	path('', include("yyyy.urls")),
]

这里是将路由映射迁移到app的 urls.py 文件,django默认是不会创建这个文件,所以我们需要在yyyy目录下创建文件 urls.py

修改工程目录xxxx/yyyy下的 urls.py

from django.contrib import admin
from django.urls import path
from . import views

app_name = 'yyyy' 

urlpatterns = [
	path('', views.index, name="index"),
	path('admin/', admin.site.urls),
]

这里将根目录的路由映射到试图views里面的index方法,我们需要去 views.py 进行添加

from django.http import HttpResponse
def index(request):
	return HttpResponse("Hello world! This is yyyy index.")

setting.py 的INSTALLED_APPS中添加app “yyyy”

INSTALLED_APPS = [
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
	'yyyy',
]

到这里我们的项目创建就完成啦,在命令行中运行服务器,打开连接就可以看到我们index返回的HttpResponse的内容如下

python manage.py runserver

网址: http://127.0.0.1:8000/

结果:
index页面

连接MySQL

在命令行中进入mysql创建数据库‘mydb’

create database mydb;

修改 setting.py 默认数据库配置

DATABASES = {
	'default': {
		'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
		'NAME': 'mydb',         # 你要存储数据的库名,事先要创建之
		'USER': 'root',         # 数据库用户名
		'PASSWORD': '123456',     # 自己的MySQL数据库密码
		'HOST': 'localhost',    # 主机
		'PORT': '3306',         # 数据库使用的端口
	}
}

Python3不支持MySQLdb,可用pymysql代替。

1.首先,在Python虚拟环境下安装pymysql

pip install pymysql

2.然后,在项目文件夹下的_init_.py添加如下代码即可。

import pymysql
pymysql.install_as_MySQLdb()

3.再者,在Terminal中执行数据库迁移命令:

python manage.py makemigrations
python manage.py migrate

搭建Django2+Python3+MySQL5时同步数据库时报错:mysqlclient 1.3.3 or newer is required; you have 0.7.11.None:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

解决办法:

找到Python安装路劲下的Python36-32\Lib\site-packages\django\db\backends\mysql\base.py文件

将文件中的如下代码注释

if version < (1, 3, 3):
	raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

重新在项目manage.py路劲下执行如下命令即可

python manage.py makemigrations
python manage.py migrate

Django调用pymysql时报错:AttributeError: ‘str’ object has no attribute ‘decode’:

File “F:\Project\PythonEnve***\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’

解决方法:

vi 上述文件,vim operations.py 注释掉 if 和 下面结果,直接返回query数据,结果就可以正常生成了。

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)
	
	#注释掉这下面两句,直接返回query
	# if query is not None:
		#query = query.decode(errors='replace')
		
	return query

把decode改成encode是错误的,简直乱用!

再重新迁移数据库运行应该就不会有问题了,models.py文件会生成django默认的数据库模型,也会同步到mydb数据库中。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值