wzh789 发表于 2018-10-10 10:21:01

django与mysql交互

  查看ubuntu已安装的所有软件:
dpkg -l  
dpkg -l | grep mysql
  查看软件安装的路径
dpkg -L | grep mysql  查看开机启动的软件,需要额外安装插件:
sudo apt-get install rcconf  
rcconf
  

  
更能全一点的:
  
sudo apt-get install sysv-rc-conf
  
sysv-rc-conf
  安装mysql:
# apt-get install python-setuptools libmysqld-dev libmysqlclient-dev  
# easy_install mysql-python
  
或者 #pip install mysql-python
  django setting配置:
DATABASES = {  
    'default': {
  
      'ENGINE': 'django.db.backends.mysql',
  
      'NAME': 'books',#你的数据库名称
  
      'USER': 'root',#你的数据库用户名
  
      'PASSWORD': '',   #你的数据库密码
  
      'HOST': '',       #你的数据库主机,留空默认为localhost
  
      'PORT': '3306',   #你的数据库端口
  
    }
  
}
  在model模块中添加如下建表语句:
  vi app/models.py
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)”
python manage.py makemigrations    #查看表有哪些更改  
python manage.py migrate app   #创建表结构
  注意:这里如果之前已经同步过一次数据,现在又要添加字段,会报错,解决办法是在字段后面添加
  null=True
  例如:
ages=models.CharField(max_length=10,null=True)  为表添加数据:django需要查询或者更新表时,需先导入表名才能获取表内的数据。
from app.models import test1  
def huoqu(request):
  
   a = test1(name='wangjiadongge')   #test1为表名,name为字段名。
  
   a.save()
  
   return HttpResponse("数据添加成功!")
  数据操作:
#获取数据  
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')
  

  
    #数据排序
  
    test1.objects.order_by("id")
  

  
    #上面的方法可以连锁使用
  
    test1.objects.filter(name="runoob").order_by("id")
  

  
    #输出所有数据
  
    for var in list:      response1 += var.name + " "
  
    response = response1
  
    return HttpResponse("" + response + "")
#更新数据  
# -*- 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("修改成功")
#删除数据  
# -*- 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("删除成功")
  #django在前端中展示从数据库中获取到的数据:
  
  html:
  
{% for a in names %}  
    id={{ a.id }}:name={{ a.name }}:sex={{ a.sex }}
  
{% endfor %}
  
  注意:这里展示的数据必须是单条数据,若是展示整个数据库的内容必须是逐条,整个取的话会导致出现QuerySet [这种数据。
  django:
  
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经典例子:
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,类型为日期类型
python manage.py makemigrations   #查看表有哪些更改  
python manage.py migrate   #同步数据库
#运行上面这条命令出现的错误:  
#Apply all migrations: admin, app, auth, contenttypes, sessions
  
#Running migrations:
  
#解决:这个错误是因为已经同步过一次数据库引起的,如果表中的字段要增加,需要添加null=True
  
#比如:ages=models.CharField(max_length=10,null=True)
  
#如果是新建一个表,则要删除app中migrations文件夹(一般不需要)。
  #如果需要用户和密码,则执行:
python manage.py createsuperuser   #创建用户  
python manage.py changepassword    #更改密码
  #练习在python交互模式下操作数据库:
./manage.py shell            #进入django变量的交互器  
from app.models import publisher #导入publisher数据库。
  #插入一条数据:
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()   #插入的数据写入数据库中
  #更新一条数据:
p1.address="qinghualu"  
p1.save()
  #查看所有的数据
  在models模块中,建表语句下面添加如下:
def __unicode__(self):  
    return self.name,self.address
  然后再去交换窗口查看所有数据:
publisher.objects.all()  #查询国家等于中国的一条数据:
publisher.objects.filter(country="china")  #查询出来的数据进行更改:
a=publisher.objects.get(name="beijing")  
a.county="USA"
  
a.save()
  #高效的更新数据方式,并且无需save:
publisher.objects.filter(id=1).update(name="qingdaodaxue")  #在浏览器中打开后台管理数据库界面:
  http://192.168.110.106/admin/
  账号就是同步数据库时创建的用户名和密码,登陆进去。
  在app下创建一个admin.py的文件
  vi admin.py
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
  --------------------------------------分割线------------------------------------


页: [1]
查看完整版本: django与mysql交互