django与mysql交互

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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

1
2
dpkg -l  
dpkg -l |  grep  mysql


查看软件安装的路径

1
dpkg -L |  grep  mysql


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

1
2
3
4
5
6
sudo  apt-get  install  rcconf
rcconf
 
更能全一点的:
sudo  apt-get  install  sysv-rc-conf
sysv-rc-conf


安装mysql:

1
2
3
# apt-get install python-setuptools libmysqld-dev libmysqlclient-dev 
# easy_install mysql-python
或者  #pip install mysql-python



django setting配置:

1
2
3
4
5
6
7
8
9
10
DATABASES  =  {
     'default' : {
         'ENGINE' 'django.db.backends.mysql'
         'NAME' 'books' ,   #你的数据库名称
         'USER' 'root' ,   #你的数据库用户名
         'PASSWORD' : '',    #你的数据库密码
         'HOST' : '',        #你的数据库主机,留空默认为localhost
         'PORT' '3306' ,    #你的数据库端口
     }
}


在model模块中添加如下建表语句:

vi app/models.py

1
2
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)”


1
2
python manage.py makemigrations     #查看表有哪些更改
python manage.py migrate app      #创建表结构

注意:这里如果之前已经同步过一次数据,现在又要添加字段,会报错,解决办法是在字段后面添加

null=True

例如:

ages=models.CharField(max_length=10,null=True)



为表添加数据:django需要查询或者更新表时,需先导入表名才能获取表内的数据。

1
2
3
4
5
from  app.models  import  test1
def  huoqu(request):    
    =  test1(name = 'wangjiadongge' )      #test1为表名,name为字段名。
    a.save()
    return  HttpResponse( "数据添加成功!" )



数据操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#获取数据
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>" )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#更新数据
# -*- 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>" )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#删除数据
# -*- 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:

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


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



django:

1
2
3
4
5
6
7
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经典例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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,类型为日期类型


1
2
python manage.py makemigrations      #查看表有哪些更改
python manage.py migrate      #同步数据库
1
2
3
4
5
6
#运行上面这条命令出现的错误:
#Apply all migrations: admin, app, auth, contenttypes, sessions
#Running migrations:
#解决:这个错误是因为已经同步过一次数据库引起的,如果表中的字段要增加,需要添加null=True
#比如:ages=models.CharField(max_length=10,null=True)
#如果是新建一个表,则要删除app中migrations文件夹(一般不需要)。


#如果需要用户和密码,则执行:

1
2
python manage.py createsuperuser    #创建用户
python manage.py changepassword     #更改密码



#练习在python交互模式下操作数据库:

1
2
. / manage.py shell               #进入django变量的交互器
from  app.models  import  publisher  #导入publisher数据库。


#插入一条数据:

1
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()   #插入的数据写入数据库中


#更新一条数据:

1
2
p1.address = "qinghualu"
p1.save()



#查看所有的数据

在models模块中,建表语句下面添加如下:

1
2
def  __unicode__( self ):
     return  self .name, self .address

然后再去交换窗口查看所有数据:

1
publisher.objects. all ()


#查询国家等于中国的一条数据:

1
publisher.objects. filter (country = "china" )


#查询出来的数据进行更改:

1
2
3
a = publisher.objects.get(name = "beijing" )
a.county = "USA"
a.save()


#高效的更新数据方式,并且无需save:

1
publisher.objects. filter ( id = 1 ).update(name = "qingdaodaxue" )



#在浏览器中打开后台管理数据库界面:

http://192.168.110.106/admin/


账号就是同步数据库时创建的用户名和密码,登陆进去。

在app下创建一个admin.py的文件

vi admin.py

1
2
3
4
5
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

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



本文转自 王家东哥 51CTO博客,原文链接:http://blog.51cto.com/xiaodongge/1903793

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
4月前
|
存储 SQL 关系型数据库
PHP与MySQL交互的奥秘
【8月更文挑战第29天】在编程的世界里,PHP和MySQL就像是一对默契的舞伴,共同演绎着数据的交响曲。本文将带你探索它们之间的互动,从连接数据库到执行查询,再到处理结果,每一步都充满了节奏与和谐。我们将一起走进这段代码的旅程,感受数据流动的魅力。
|
20天前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
23 0
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
95 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
73 1
|
3月前
|
关系型数据库 MySQL Python
pymysql模块,python与MySQL之间的交互
pymysql模块,python与MySQL之间的交互
|
4月前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
409 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
4月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
320 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
4月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
186 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
3月前
|
关系型数据库 MySQL 数据库
python之excel与mysql之间的交互
python之excel与mysql之间的交互