zoukankan      html  css  js  c++  java
  • django中数据库的相关操作

    一、使用环境

    python2.7,django>1.7

    二、数据库进行配置

    在setting文件中进行修改

    1、找到DATABASES 

    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': 'studentInfo', # Or path to database file if using sqlite3.
    'USER': 'root', # Not used with sqlite3.
    'PASSWORD': '123456', # Not used with sqlite3.
    'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',
    }
    }

    2、找到INSTALLED_APPS,添加创建的app名。

    INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'article',
    )

    3、创建数据表

    django框架可以创建数据表,但是不可以创建数据库。所以,在创建数据表之前需要手动创建数据库。

    常用命令:

    • python manage.py syncdb。将创建的数据表导入到数据库中,如果已经创建好,修改过后,不会更新。需要使用另外的命令。
    • python manage.py makemigrations.
    • python manage.py migrate
    • python manage.py validate 检查有效性,在执行世纪导入数据库之前,检查语句是否有问题。

    在需要使用数据库的app包里编辑models.py文件,生成基于models.Model的类,就产生一个数据表。例子如下:

    1 class StudentInfo(models.Model):
    2     
    3     name = models.CharField(max_length = 50,default="");
    4     studentID = models.CharField(max_length=12,default="");
    5     sex = models.CharField(max_length = 5,default="");
    6     age = models.IntegerField(default=0);
    7     address = models.TextField(default="")
    View Code

    4、数据库表的增删改查

    (1)

    c = User(name = name);
    c.save();

    (2)

    User.objects.create(name=name)

    使用对象的delete方法

    1 def Delete(request,id):
    2     objs = User.objects.filter(id=id);
    3     if objs:
    4         User.objects.get(id=id).delete();
    5         return HttpResponse(objs[0].name + " delete success")
    6     else:
    7         return HttpResponse("no data match the query");
    View Code

    使用update方法

    def Update(request,id,name):
        objs = User.objects.filter(id=id);
        if objs:
            obj = User.objects.get(id=id)
            obj.name = name;
            obj.save();
            return HttpResponse("%s update success"%id);
        else:
            return HttpResponse("no data match the query");
    View Code

    使用get或者filter方法,其中filter()方法可以传一个或多个参数。也可以模糊查询,使用__contains,在列明之后添加__contains相当于SQL中的LIKE语句;还有其他一些魔法语句

    比如:__icontains对大小写不敏感, __startswith and __endswith。

    filter方法返回一个QuerySet类似于列表,get返回一个对象,如果没有或者有多个则会报错。

    使用get方法,如果没有对相匹配,会产生一个 DoesNotExist异常,这个异常是models类的一个属性,因此可以通过捕获这些异常来处理没有匹配数据的情况。

    try:
        p = Publisher.objects.get(name='Apress')
    except Publisher.DoesNotExist:
        print "Apress isn't in the database yet."
    else:
        print "Apress is in the database."
    def GetByid(request,id):
        objs = User.objects.filter(id=id);
        if objs:
            obj = User.objects.get(id=id);
            return HttpResponse("name is %s"%obj.name);
        else:
            return HttpResponse("not find id=%s"%id);
    View Code
    1 def getByName(request,name):
    2     objs = User.objects.filter(name__contains=name);
    3     if objs:
    4         name = [];
    5         for each in objs:
    6             name.append(each.name);
    7         return HttpResponse(','.join(name));
    8     else:
    9         return HttpResponse("no data contain %s"%name);
    View Code

    5 http请求在web应用程序中的响应流程

    • web服务器接到一个http请求
    • django将web服务器传过来的请求转换成一个请求对象
    • django在urlconf里查找对应视图函数
    • 调用这个视图函数,参数是请求对象、捕捉到的url参数
    • 视图创建一个响应对象并返回
    • django将这个响应对象转换成web服务器可以理解的格式
    • web服务器将响应发送到客户端
  • 相关阅读:
    Fastjson
    react 使用createContext、Consumer 及 useContext 、Class.contextType父子组件共享数据
    使用useReducer 实现 todoList
    react中 useMemo与useCallback使用
    react17 函数组件 使用 better-scroll2.0 封装方法 及 使用
    react 执行 yarn build ,无法直接打开dist文件下的index
    react-redux 持久数据存储
    document.body.removeChild 获取到 symbol 标签
    react嵌套路由,并设置默认子路由
    Vagrant环境下配置node_exporter、mysqld_exporter、prometheus、grafana
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/5427888.html
Copyright © 2011-2022 走看看