zoukankan      html  css  js  c++  java
  • Python后台开发Django(数据库)

    如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别

    Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,与数据库相关的代码一般写在models.py中

    配置MYSQL

    ORM操作:默认使用文件自带的db.sqlite3数据库,如果需要使用mysql数据库则需要进行以下配置

    在setting.py中替换数据库配置

    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'dbname',
        'USER': 'root',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        }
    }

    添加pymysql,由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替,在工程同名的目录里__init__.py下添加

    import pymysql
    pymysql.install_as_MySQLdb()

    表的基本操作

    创建表

    在对应APP的models.py中,如果创建多表则在此文件中添加类即可

    #表名为dongapp2_tbuser
    #属性为字段名,默认会创建主键为自增ID列
    #修改id列的字段名:iddong=models.AutoField(primary_key=True)
    class Tbuser(models.Model):
        userx=models.CharField(max_length=32) #类型为:varchar(32)
        passwd=models.CharField(max_length=64)#可以添加实参【null=True】,表示值可以为空
        age=models.IntegerField() #类型为:integer
    settings.py的INSTALLED_APPS=[  ]注册,添加APP的名字
    'dongapp2',
    命令行进入APP目录,执行下面两条命令:
    python ../manage.py makemigrations
    python ../manage.py migrate

    修改表

    在修改或者删除字段时都需要进行两条命令的执行,models.py中的数据库映射时时刻刻绑定着原数据,执行两条命令后会进行数据表结构同步

    字段数据类型补充

    所设置的字段类型大部分是不会在编写增删改查时进行自动验证,而是有益于Django自带的admin管理后台应用

    xx=models.EmailField(null=True)#邮箱格式,Django自带用户管理页使用
    xx=models.URLField(null=True)#URL格式
    xx=models.GenericIPAddressField(null=True)#IP4或者IP6格式
    xx=models.BooleanField()#bool类型
    xx=models.FloatField()#浮动数
    xx=models.DateField()#类似于data =>YYYY-MM-DD
    xx=models.DateTimeField()#类似于datatime =>YYYY-MM-DD HH:mm:ss
    xx=models.TimeField() #时间

    字段实参:

    null             #是否可为空,默认不可为空,如【unll=True】可为空

    default          #默认值

    primary_key     #主键

    db_column      #数据库中数据表的字段名

    db_index        #是否建立索引

    auto_now_add   #创建当前行时自动添加为当前时间,【xx=models.DateTimeField(auto_now_add=True)】

    auto_now       #更新当前行时自动更新为当前时间,仅支持下面的更新数据方法二

    外键

    在建立表字段时添加,外键字段在数据库中为:forekx_id
    forekx=models.ForeignKey("另一个表的类名",to_field="另一个表类的字段名,默认为id字段",default="默认值")
    在数据获取中进行跨表取数据
    resx = models.Tbuser.objects.filter(id=3).first()
    resx.forekx.另一个表类的任意字段名  # resx.forekx为另外表的一行数据对象
    添加/修改外键字段的值
    #方法一
    forekx_id=11
    #方法二
    forekx=models.XxxxXC.objects.filter(ldong="dongxiao").first()

    数据增删改查

    数据的操作一般会在 view(业务处理)中进行

    添加数据

    1 from dongapp2 import models
    2 #方法一
    3 models.Tbuser.objects.create(userx="dong2",passwd="1234562",age=20)
    4 #方法二
    5 #datax=models.Tbuser(userx="dong3",passwd="1234563",age=20)
    6 #datax.save()

    查询数据

    Filter条件补充:Id字段大于等于0:【id__gt=0】

     1 from dongapp2 import models
     2 
     3 #查询并输出列表
     4 # # resx=models.Tbuser.objects.all()#查询所有,查询结果为[对象,对象]
     5 # resx = models.Tbuser.objects.filter(userx="dong1", age=10)  # 条件查询,and
     6 # countx = len(resx)  # 得到查询的总行数
     7 # for rowx in resx:  # 循环输出值,控制台接收(开启服务的地方)
     8 #    print(rowx.id, rowx.userx, rowx.age)
     9 # resx=models.Tbuser.objects.all().values("id","name")#查询所有并获取指定字段数据,查询结果[字典,字典]
    10 
    11 # 查询第一个,返回非列表
    12 # resx = models.Tbuser.objects.filter(id=3).first()
    13 # if resx:
    14 #    print(resx.age)
    15 
    16 #返回查找的总行数
    17 resx = models.Tbuser.objects.filter(passwd="1234562").count()

    删除数据

    from dongapp2 import models
    resx = models.Tbuser.objects.filter(id=1).delete()

    更新数据

    from dongapp2 import models
    #方法一
    resx = models.Tbuser.objects.filter(id=3).update(age=30)
    #方法二
    resxobj = models.Tbuser.objects.filter(id=3).first()
    resxobj.age=100
    resxobj.save()
  • 相关阅读:
    MySQL 01-MySQL简介
    什么是数据库
    系统安装05-Xenserver 7.0安装
    系统安装04-VMware VCSA 6.5 系统安装
    poj--2516--Minimum Cost(最小费用流)
    hdoj--1533--Going Home(最小费用流)
    hdoj--5621--KK's Point(简单数学)
    hdoj--5620--KK's Steel(斐波那契数)
    nyoj--635--Oh, my goddess(dfs)
    poj--2236--棋盘问题(dfs)
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10496712.html
Copyright © 2011-2022 走看看