django与mysql交互

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 数据库
django4版本提示 django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)
在学习Django时,用户遇到`django.db.utils.NotSupportedError`,提示需要MySQL 8.0.25或更高版本,但其系统上是5.7.26。为解决这个问题,用户决定不升级MySQL,而是选择注释掉Django源码中的数据库版本检查。通过Python命令行找到Django安装路径,进入`db/backends/base/base.py`,注释掉`self.check_database_version_supported()`函数
423 0
|
1月前
|
存储 关系型数据库 MySQL
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
Python Django框架下将MySQL数据库的内容在网页上动态展示(修订版-2021-05-17)
30667 0
|
1月前
|
安全 关系型数据库 MySQL
Linux 实用小脚本系列(2)----mysql安全初始化脚本的免交互执行--mysql_secure_installation
Linux 实用小脚本系列(2)----mysql安全初始化脚本的免交互执行--mysql_secure_installation
76 0
|
8天前
|
SQL 关系型数据库 MySQL
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)
|
14天前
|
SQL 关系型数据库 MySQL
Django调用mysql
Django调用mysql
|
1月前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
44 6
|
1月前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
196 11
|
1月前
|
存储 关系型数据库 MySQL
手把手教你使用Django如何连接Mysql
手把手教你使用Django如何连接Mysql
246 0
|
1月前
|
存储 缓存 关系型数据库
Mysql专栏 - Linux底层交互和Raid存储架构
Mysql专栏 - Linux底层交互和Raid存储架构
94 0
|
1天前
|
SQL 关系型数据库 MySQL
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库
数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库