千家信息网

django配置mysql数据库

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,查看ubuntu已安装的所有软件:dpkg -l dpkg -l | grep mysql查看软件安装的路径dpkg -L | grep mysql查看开机启动的软件,需要额外安装插件:sudo a
千家信息网最后更新 2024年09月22日django配置mysql数据库

查看ubuntu已安装的所有软件:

dpkg -l  dpkg -l | grep mysql


查看软件安装的路径

dpkg -L | grep mysql


查看开机启动的软件,需要额外安装插件:

sudo apt-get install rcconfrcconf更能全一点的:sudo apt-get install sysv-rc-confsysv-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 test1def 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')[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("

" + 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 adminfrom app.models import publisher,author,bookadmin.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

--------------------------------------分割线------------------------------------


0