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

[经验分享] Python笔记(六)- 模型及Django站点管理

[复制链接]

尚未签到

发表于 2015-11-30 08:28:57 | 显示全部楼层 |阅读模式
  在这篇博文中,将介绍django与数据库方面的交互的知识。首先在网上下载Python For MySQL,然后进行安装。安装成功之后,在setting.py文件中进行装载,如下:



1 DATABASES = {
2     'default': {
3         'ENGINE': 'django.db.backends.mysql',
4         'NAME': 'database', #首先要在MySQL中建立一个数据库叫database
5         'USER':'root',  #你数据库的用户
6         'PASSWORD':'root',  #你数据库的密码
7         'HOST':'127.0.0.1',
8         'PORT':'3306'
9     }
10 }
  配置好之后,如果没有错的话,进入项目所在目录,在命令行中运行python manage.py shell来进行测试。如果输入下面这段代码没有显示什么错误信息,就证明你的数据库配置正确了。之后就能进行增删改查操作。



1 from django.db import connection
2 cursor = connection.cursor()
  下面假设你的数据库配置正确了。我们将演示如何进行增删改查操作。
  首先在app应用中添加模型,我这里添加了3个,分别如下:



1 #encoding=utf-8
2 from django.db import models
3
4 #建立模型,对应MySQL中的表
5 # Create your models here.
6     
7 class Publisher(models.Model):
8     name = models.CharField(max_length = 30)    #字段名以及类型指定
9     address = models.CharField(max_length = 50)
10     city = models.CharField(max_length = 50)
11     state_province = models.CharField(max_length = 50)
12     country = models.CharField(max_length = 50,blank=True)#blank=True表明字段可以为空
13     website = models.URLField(blank=True) #Python提供的特定URL形式
14     
15     def __unicode__(self):  #相当于Java中的toString()
16         return u'id=%d,name=%s'%(self.id,self.name)
17     
18     class Meta: #指定之后查出的结果集按照id的升序排列,使用ordering=['-id']则为降序.
19         ordering = ['id']
20         
21 class Author(models.Model):
22     first_name = models.CharField(max_length = 50)
23     last_name = models.CharField(max_length = 50)
24     email = models.EmailField() #Python提供的特定Email格式x
25     
26     def __unicode__(self):
27         return u'firstname=%s' %self.first_name
28     
29     class Meta:
30         ordering = ['id']
31     
32 class Book(models.Model):
33     title = models.CharField(max_length = 50)
34     author = models.ManyToManyField(Author) #book和author为多对多
35     publisher = models.ForeignKey(Publisher)#外键
36     publication_date = models.DateField()   #Python提供的特定日期格式
37     
38     def __unicode__(self):
39         return self.title
40     
41     class Meta:
42         ordering = ['id']
  上面的代码请参看其后注释,很容易理解。简历好模型之后(模型对应我们在数据库中表),我们在setting.py中的INSTALLED_APPS元组里对我们的项目进行注册。然后使用python manage.py syncdb命令创建数据库中的表。创建成功之后,在tests.py里面对数据库进行操作(不是一定要在这个文件里)。
  插入数据
  先看下面这段代码:



1 #encoding=utf-8
2 #Create your tests here.
3 from Second.models import Publisher
4 #插入对象
5 p1 = Publisher(name='zhouxy',address='nenu-software',city='长春',state_province='CA',country='China',website='www.cnblogs.com/zhouxuanyu')
6 p1.save();
7 p2 = Publisher(name='zhouxuanyu',address='nenu-software',city='长春',state_province='CA',country='China',website='www.cnblogs.com/zxyyxzshine')
8 p2.save();
9 publisher_list = Publisher.objects.all();
10 print publisher_list
  在上面第5,7行创建两个对象p1,p2。然后我们分别调用它们的save()方法,将其插入数据库。9,10行打印出这两个对象的信息。打印的信息就是我们在model中定义Publisher的时候所定义的__unicode__函数返回的值。类似于Java中对象的toString()。下面是结果图: DSC0000.png
  我们可以使用python manage.py sqlall Second命令来显示MySQL语法。(版面原因,我只截部分图) DSC0001.png
  查询数据



1 #查询对象
2 print Publisher.objects.filter(name='zhouxy').order_by('id') #等同于在sql中使用where关键字,也可以在model中添加class Meta:
3 print Publisher.objects.filter(name='zhouxy',city='长春') #等同于在sql中使用where和and关键字
4 print Publisher.objects.filter(name__contains='zhouxy')[0:2] #sql缺省=操作符是精确匹配,字段__contains相当于sql中的like,切片操作符等同于sql中的offset..limit..
5 print Publisher.objects.get(name='zxyyxzshine',id=2) #获取单个对象
  对照注释,很容易理解。filter()等同于sql中的where关键字。order_by()等同于sql中的order by语句。如果在filter中添加一个以上的条件,那么就相当于在sql中在条件语句中使用and关键字将条件结合起来。
  更新数据



1 #更新对象
2 print Publisher.objects.filter(id=1).update(name="zxyyxzshine") #返回更新成功的row数
3 print Publisher.objects.filter(name='zhouxuanyu').update(name='zxyyxzshine')
  删除对象



1 #删除对象
2 print Publisher.objects.filter(id=1).delete()  
3 print Publisher.objects.all().delete()
  

运维网声明 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-145108-1-1.html 上篇帖子: [LeetCode][Python]Largest Number 下篇帖子: Python字符串的相关操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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