DATABASES = { ‘default‘: { # ‘ENGINE‘: ‘django.db.backends.sqlite3‘, # ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘), ‘ENGINE‘:‘django.db.backends.mysql‘, ‘NAME‘:‘数据库名称‘, ‘USER‘:‘数据库账号‘, ‘PASSWORD‘:‘数据库密码‘, ‘HOST‘:‘数据库地址,本地的话即为localhost‘, ‘PORT‘:‘数据库端口,默认为3306‘, } }
import pymysql pymysql.install_as_MySQLdb()
python manage.py inspectdb > D:\django_test\mytestsite\quicktool\models.py
集成已有的数据库和应用,生成models,复制到应用app的models.py中(quicktool/models.py)
命令行结束返回无报错即成功,quicktool的models.py 文件会自动复制生成本地环境已有数据库的类,类名为数据表名,继承自models.Model,每个类定义有数据表内的字段名
在项目的manage.py所在路径下使用命令 python manage.py shell
报以下错误信息:
AssertionError: Model quicktool.AppVersionInfo can‘t have more than one AutoField.
原因是:第五步复制导入的数据库的部分表里增加了AutoField列,但是又不指定这个列作为主键,全文搜索应用app的models.py文件出现models.AutoField()的地方,为django的AutoField字段设定为主键models.AutoField(primary_key=True)即可解决
再继续使用以下命令行查询数据
python manage.py shell from quicktool.models import AppVersionInfo AppVersionInfo.objects.get(version_code=10)
数据库里有表AppVersionInfo和字段version_code
CREATE TABLE `app_version_info` (version_code` int(3) NOT NULL DEFAULT ‘0‘)
查询结果打印的是id值,并没有显示出具体相关数据表的信息
在quicktool/models.py文件中的每个类增加以下代码即可解决打印问题
def __str__(self): # 在Python3中使用 def __unicode__(self): return self.url
新增方法后,打印的是数据表的具体数据
quicktool/views.py文件:
from django.http import HttpResponse from quicktool.models import AppVersionInfo def index(request): appl = AppVersionInfo.objects.get(version_code=25) return HttpResponse(str(appl))
mytestsite/mytestsite/urls.py文件的路径,其余省略:
from quicktool import views as quicktool_views # 新增 urlpatterns = [ path(‘‘, quicktool_views.index, name=‘home‘), # 新增 ]
quicktool/templates/home.html文件的body,其余省略:
<body> {{ appl }} </body>
查询结果可视化显示在网页,显示如下:
Django web框架-----Django连接本地现有mysql数据库
原文:https://www.cnblogs.com/kristin/p/10791358.html