本文共 5851 字,大约阅读时间需要 19 分钟。
查看ubuntu已安装的所有软件:
1 2 | dpkg -l dpkg -l | grep mysql |
查看软件安装的路径
1 | dpkg -L | grep mysql |
查看开机启动的软件,需要额外安装插件:
1 2 3 4 5 6 | sudo apt-get install rcconf rcconf 更能全一点的: sudo apt-get install sysv-rc-conf sysv-rc-conf |
安装mysql:
1 2 3 | # apt-get install python-setuptools libmysqld-dev libmysqlclient-dev # easy_install mysql-python 或者 #pip install mysql-python |
django setting配置:
1 2 3 4 5 6 7 8 9 10 | DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'books' , #你的数据库名称 'USER' : 'root' , #你的数据库用户名 'PASSWORD' : '', #你的数据库密码 'HOST' : '', #你的数据库主机,留空默认为localhost 'PORT' : '3306' , #你的数据库端口 } } |
在model模块中添加如下建表语句:
vi app/models.py
1 2 | class test1(models.Model): name = models.CharField(max_length = 20 ) #定义的字段name为字段名 |
model模块在app中,其中定义的类名就是表名(但是在数据库中的表名会以app为前缀,例如项目为app则实际创建的表名为app_test1),CharField相当于varchar,DateField相当于datetime,max_length 相当于参数限定长度“varchar(20)”
1 2 | python manage.py makemigrations #查看表有哪些更改 python manage.py migrate app #创建表结构 |
注意:这里如果之前已经同步过一次数据,现在又要添加字段,会报错,解决办法是在字段后面添加
null=True
例如:
ages=models.CharField(max_length=10,null=True)
为表添加数据:django需要查询或者更新表时,需先导入表名才能获取表内的数据。
1 2 3 4 5 | from app.models import test1 def huoqu(request): a = test1(name = 'wangjiadongge' ) #test1为表名,name为字段名。 a.save() return HttpResponse( "数据添加成功!" ) |
数据操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #获取数据 def huoqu(request): #通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM list = test1.objects. all () #filter相当于SQL中的WHERE,可设置条件过滤结果 list1 = test1.objects. filter ( id = 1 ) #获取单个对象 list2 = test.objects.get( id = 1 ) #限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2; test1.objects.order_by( 'name' )[ 0 : 2 ] #数据排序 test1.objects.order_by( "id" ) #上面的方法可以连锁使用 test1.objects. filter (name = "runoob" ).order_by( "id" ) #输出所有数据 for var in list : response1 + = var.name + " " response = response1 return HttpResponse( "<p>" + response + "</p>" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #更新数据 # -*- coding: utf-8 -*- from django.http import HttpResponse from app.models import test1 def testdb(request): #修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE test = test1.objects.get( id = 1 ) test.name = 'Google' test.save() #另外一种方式 #test1.objects.filter(id=1).update(name='Google') # 修改所有的列 # test1.objects.all().update(name='Google') return HttpResponse( "<p>修改成功</p>" ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #删除数据 # -*- coding: utf-8 -*- from django.http import HttpResponse from app.models import Test # 数据库操作def testdb(request): # 删除id=1的数据 test1 = Test.objects.get( id = 1 ) test1.delete() #另外一种方式 #test1.objects.filter(id=1).delete() #删除所有数据 #test1.objects.all().delete() return HttpResponse( "<p>删除成功</p>" ) |
#django在前端中展示从数据库中获取到的数据:
html:
1 2 3 | {% for a in names %} id={ { a.id }}:name={ { a.name }}:sex={ { a.sex }} {% endfor %} |
注意:这里展示的数据必须是单条数据,若是展示整个数据库的内容必须是逐条,整个取的话会导致出现QuerySet [<test2: test2 object>这种数据。
django:
1 2 3 4 5 6 7 | def testdb(request): #list = test2.objects.all() names = test2.objects. filter ( id = 1 ) print names #return HttpResponse('this is test select mysql!') return render_to_response( 'a.html' , locals ()) #locals()是获取整个本地变量 |
-------------------分割线--------------------
#django经典例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from django.db import models #导入models模块 #表名: class publisher(models.Model): #定义表名为publish name = models.CharField(max_length = 30 ) #表字段name address = models.CharField(max_length = 50 ) #表字段address city = models.CharField(max_length = 60 ) #表字段city state_province = models.CharField(max_length = 30 ) county = models.CharField(default = "CN" ,max_length = 50 ) website = models.URLField() #表字段website,字段类型为地址 表名: class author(models.Model): first_name = models.CharField(max_length = 30 ) last_name = models.CharField(max_length = 40 ) email = models.EmailField(blank = True ) #字段名字为email,字段类型为email #表名: class book(models.Model): title = models.CharField(max_length = 100 ) #字段名为title,字段类型为vachar authors = models.ManyToManyField(author) #字段名为author,字段类型为ManyToManyField publisher = models.ForeignKey(publisher) #关联外部表publisher publication_date = models.DateField() #字段名为publication_date,类型为日期类型 |
1 2 | python manage.py makemigrations #查看表有哪些更改 python manage.py migrate #同步数据库 |
1 2 3 4 5 6 | #运行上面这条命令出现的错误: #Apply all migrations: admin, app, auth, contenttypes, sessions #Running migrations: #解决:这个错误是因为已经同步过一次数据库引起的,如果表中的字段要增加,需要添加null=True #比如:ages=models.CharField(max_length=10,null=True) #如果是新建一个表,则要删除app中migrations文件夹(一般不需要)。 |
#如果需要用户和密码,则执行:
1 2 | python manage.py createsuperuser #创建用户 python manage.py changepassword #更改密码 |
#练习在python交互模式下操作数据库:
1 2 | . / manage.py shell #进入django变量的交互器 from app.models import publisher #导入publisher数据库。 |
#插入一条数据:
1 | p1 = publisher(name = 'qinghua university' ,address = 'wudaokou' ,city = 'beijing' ,state_province = 'beijing' ,county = 'china' ,website = 'www.qinghua.com' ) |
p1.name #查看插入的name
p1.address #查看插入的address
p1.save() #插入的数据写入数据库中
#更新一条数据:
1 2 | p1.address = "qinghualu" p1.save() |
#查看所有的数据
在models模块中,建表语句下面添加如下:
1 2 | def __unicode__( self ): return self .name, self .address |
然后再去交换窗口查看所有数据:
1 | publisher.objects. all () |
#查询国家等于中国的一条数据:
1 | publisher.objects. filter (country = "china" ) |
#查询出来的数据进行更改:
1 2 3 | a = publisher.objects.get(name = "beijing" ) a.county = "USA" a.save() |
#高效的更新数据方式,并且无需save:
1 | publisher.objects. filter ( id = 1 ).update(name = "qingdaodaxue" ) |
#在浏览器中打开后台管理数据库界面:
http://192.168.110.106/admin/
账号就是同步数据库时创建的用户名和密码,登陆进去。
在app下创建一个admin.py的文件
vi admin.py
1 2 3 4 5 | from django.contrib import admin from app.models import publisher,author,book admin.site.register(publisher) admin.site.register(author) admin.site.register(book) |
完成后,重新打开页面。
#django中引用bootstrap:
在setting.py中:
MEDIA_ROOT='/root/project/statics/bootstrap/'
在url.py中:
from django.conf import settings
--------------------------------------分割线------------------------------------
本文转自 王家东哥 51CTO博客,原文链接:http://blog.51cto.com/xiaodongge/1903793
转载地址:http://ynjko.baihongyu.com/