温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

django配置mysql数据库

发布时间:2020-07-14 07:41:04 来源:网络 阅读:792 作者:王家东哥 栏目:数据库

查看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')[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>")

#更新数据 # -*- 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>")
#删除数据 # -*- 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:

{% for a in names %}     id={{ a.id }}:name={{ a.name }}:sex={{ a.sex }} {% endfor %}


注意:这里展示的数据必须是单条数据,若是展示整个数据库的内容必须是逐条,整个取的话会导致出现QuerySet [<test2: test2 object>这种数据。



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

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI