温馨提示×

温馨提示×

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

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

django配置mysql数据库

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

查看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