设为首页 收藏本站
查看: 906|回复: 0

[经验分享] django与mysql交互

[复制链接]

尚未签到

发表于 2018-10-10 10:21:01 | 显示全部楼层 |阅读模式
  查看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("" + 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-619848-1-1.html 上篇帖子: 远程连接mysql速度慢的解决方法 下篇帖子: Mysql事件学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表