有事没事领个红包

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服务器将响应发送到客户端
posted @ 2016-04-24 19:38  crazyCodeLove  阅读(481)  评论(0编辑  收藏  举报