Django简单的数据库交互(mysql)

一、数据库的简单交互

首先你需要安装有自己的mysql数据库,此文不做介绍
另外,你需要预设一个空数据库test用于之后的操作
当然,你需要在虚拟环境中安装pymysql

pip install pymysql

在mysql数据库中创建一个空数据库test
1、设置数据库
在setting.py中找到DATABASES字典
在这里插入图片描述
配置为

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',#数据库类型
        'NAME': 'test',#数据库名字
        'USER':'root',#自己数据库用户名
        'PASSWORD':'123',#自己的数据库的密码
        'PORT':'3306'#mysql数据库端口,一般为3306,如果不是请修改
    }
}

2、添加驱动
在命令行输入pip install pymysql安装python的pymysql库
即导入python使用mysql数据库的包pymysql
在项目中找到__init__.py文件
写入代码

import pymysql
pymysql.install_as_MySQLdb()

3、定义表字段
打开项目中的models.py文件
创建如下两个类,表示使用到数据库的表

class AddressInfo(models.Model):
    '''地址表
    类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度'''
    add=models.CharField(max_length=50)
    class Meta:
        #元类
        db_table = 'addressinfo'#定义数据表名称
        verbose_name = '地址管理'#在网页端显示的名字
        verbose_name_plural = verbose_name#去复数形式
    def __str__(self):
        return self.add
class UserInfo(models.Model):
    """ 用户表 """
    name=models.CharField(max_length=20)
    addinfo=models.ForeignKey(AddressInfo)
    #这个是两张表之间的关系,关系写在从表身上,ForeignKey()里面填写的是主表的类名
    class Meta:
        # 元类
        db_table = 'userinfo'
        verbose_name = '用户信息管理'
        verbose_name_plural = verbose_name
    def __str__ (self):
        return self.name

4、数据库迁移
使用命令行在项目目录下执行命令

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
Django简单的数据库交互(mysql)_第1张图片
完成后打开数据库
Django简单的数据库交互(mysql)_第2张图片
可以看到除了django默认的数据表以外,addressinfo和userinfo表创建完成
5、使用admin管理创建的字段表
将设计的表注册到项目中的admin.py文件中

from user.models import AddressInfo,UserInfo
admin.site.register(UserInfo)
admin.site.register(AddressInfo)

创建超级用户
使用指令python manage.py createsuperuser
Django简单的数据库交互(mysql)_第3张图片
超级用户创建成功,如果忘记密码可以执行命令python manage.py changepassword admin直接修改密码(admin为自定义的用户名)

用浏览器进入http://127.0.0.1:8000/admin/
Django简单的数据库交互(mysql)_第4张图片
在这个可视化页面中可以方便的增删改自定义表单的数据
6、admin页面细节调整
在项目的apps.py文件中可以添加代码
Django简单的数据库交互(mysql)_第5张图片
可以将首页中除django外唯一的英文USER替换为中文,不修改也无伤大雅
Django简单的数据库交互(mysql)_第6张图片

二、django数据库交互语法

对于存在外键的数据表进行修改或者增加操作时,需要写外键的id或者按照外键名获取外键名对应的id
1、基本查询语法
all,get,count,filter

from user.models import UserInfo
data1=UserInfo.bojects.all()#查询所有数据
#返回多个对象

data2=UserInfo.object.get(id=1)#按照指定条件查询
#返回一个符合关键词的单一对象

data3=UserInfo.objects.count()#查询符合条件的数据条数
#返回数据的条数

data4=UserInfo.objects.filter(id_lte=1)#查询多条符合条件的数据
#id_gt=1 id大于1的数据
#id_gte=3 id大于等于3的数据
#id_lt=1 id小于1的数据
#id_lte=1 id小于等于1的数据
#name__startswidth='王' 查找名字字段中带有王的数据

#格式:字段表模型类名.objects.方法()

2、基本的增加语句
方法一:

data1 = AddressInfo(add='北京',)#填写多个字段的数据
data1.save()#完成操作

方法二:

AddressInfo.objects.create(add='北京',)

3、基本删除语句

data1 = AddressInfo.objects.get(add='北京')
data1.delete()#使用任意查询语句后跟.delete()即可删除指定数据

4、基本修改语句
方法一:

data1 = AddressInfo.objects.get(add='北京')
data1.add='上海'#使用任意查询语句后跟列名直接使用等于即可修改
data1.sava()#保存修改

方法二:

AddressInfo.objects.all().update(add='北京')#直接修改,不需要保存修改
AddressInfo.objects.filter(name=name).update(add='北京')#update只能操作对象,get方法获得的字符串则不能使用update方法

三、网页与数据库交互

这里用到tag标签和view方法
使用方法:https://blog.csdn.net/changfcqxhy/article/details/90778848
1、html页面显示数据库返回的数据
html网页


    
    {% for obj in data %}
  • {{ obj.name }}
  • {{ obj.addinfo }}
  • {% endfor %}

添加视图views
此处直接使用all方法查找所有数据

from user.models import UserInfo
def show(request):
    data=UserInfo.objects.all()
    context={'data':data}
    return render(request,'show.html',context)

添加urls

from user import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',views.index),
    url(r'^show/$',views.show),
]

运行服务器后打开网址 http://127.0.0.1:8000/show/
在这里插入图片描述
显示成功
2、html页面增加数据库数据
form表单中提交数据可以使用get请求也可以使用post请求
使用get请求时同理,使用正则表达式取出数据即可
这里仅演示使用post请求的方法

html页面
{% csrf_token %}防止csrf错误


    
{% csrf_token %} 名字 地址

添加视图views

def adduser (request):
    """ 添加用户数据视图 """
    name=request.POST.get('name')#获取post请求返回的名字
    address=request.POST.get('address')#获取post请求返回的地址
    if request.POST.get('name'):#如果返回有数据
        try:
            addinfo=AddressInfo.objects.get(add=address)#试图查找地址
        except:#已有地址中找不到则添加新地址
            addinfo=AddressInfo.objects.create(add=address)#添加新的地址
        UserInfo.objects.create(name=name,addinfo=addinfo)#将用户信息加入到用户表中
    return render(request,'adduser.html')

添加urls

from user import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',views.index),
    url(r'^show/$',views.show),
    url(r'^adduser/$',views.adduser),
]

运行服务器之后打开网址 http://127.0.0.1:8000/adduser/
输入如下内容
在这里插入图片描述
提交后,服务器cmd中看到
在这里插入图片描述
成功收到post请求,没有报错,操作成功
Django简单的数据库交互(mysql)_第7张图片
Django简单的数据库交互(mysql)_第8张图片
新地址和新用户添加成功
3、html页面删除数据库数据
html页面


    {% for obj in test %}
    

{{obj}}

{% endfor %}
{% csrf_token %}

添加视图views

def delete(request):
    '''删除用户数据'''
    def ret(res):
        '''返回的函数'''
        data=UserInfo.objects.all()
        context={'data':data}
        context['test']=[res]#动态输出网页标题
        return render(request,'delete.html',context)
    if request.method=='GET':
        res='请选择要删除的用户数据'
        return ret(res)#get请求直接返回页面
    else:
        name=request.POST.get('name')#获取post请求返回的名字
        UserInfo.objects.get(name=name).delete()#删除对应数据
        res='%s的数据已删除,你可以继续选择要删除的数据'%name
        return ret(res)

添加urls

from user import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',views.index),
    url(r'^show/$',views.show),
    url(r'^adduser/$',views.adduser),
    url(r'^delete/$',views.delete),
]

运行服务器之后打开网址 http://127.0.0.1:8000/delete/
这里选择删除老王的数据
Django简单的数据库交互(mysql)_第9张图片
删除成功
在这里插入图片描述
mysql数据库中已经没有老王的数据了
在这里插入图片描述
4、html页面修改数据库数据
html页面


    

修改密码

{% csrf_token %} 用户名 原密码 新密码 确认密码

添加视图views

def alert (request):
    """ 修改用户数据 """
    def ret(res):
        '''返回的函数'''
        data=UserInfo.objects.all()
        print('###',data)
        context={'data':data}
        context['test']=[res]#动态输出网页标题
        print('###',context)
        return render(request,'alert.html',context)
    if request.method=='GET':
        res='修改用户地址'
        return ret(res)#get请求直接返回页面
    else:
        name=request.POST.get('name')#获取post请求返回的名字
        address=request.POST.get('address')#获取post请求返回的地址
        res='%s地址已修改为%s'%(name,address)
        try:
            addinfo=AddressInfo.objects.get(add=address)#试图查找地址
        except:
            addinfo=AddressInfo.objects.create(add=address)#添加新的地址
        UserInfo.objects.filter(name=name).update(addinfo=addinfo)#按照用户名修改用户的地址
        return ret(res)

添加urls

from user import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$',views.index),
    url(r'^show/$',views.show),
    url(r'^adduser/$',views.adduser),
    url(r'^delete/$',views.delete),
    url(r'^alert/$',views.alert),
]

运行服务器之后打开网址 http://127.0.0.1:8000/alert/
修改小王的地址为深圳
在这里插入图片描述
修改完成
在这里插入图片描述
查询数据库

Django简单的数据库交互(mysql)_第10张图片在这里插入图片描述
地址表中增加了深圳这个条目,同时小王的地址id已经修改为深圳代表的4

你可能感兴趣的:(django,mysql,python)