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

[经验分享] python数据库模型总结

[复制链接]

尚未签到

发表于 2017-4-23 15:23:53 | 显示全部楼层 |阅读模式
先看一下数据库模型之间的对应关系:
Author      n:n      Book      n:1      Publisher
然后看看在python项目中的models.py中如何表示:

class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True,verbose_name='e-mail')
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField(blank=True, null=True)

下面看看如何插入数据:
方法一:

p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street',city='Boston', state_province='MA', country='U.S.A.',website='http://www.apress.com/')
p1.save()

方法二:

p1 = Publisher.objects.create(name='Apress',address='2855 Telegraph Avenue',city='Berkeley', state_province='CA', country='U.S.A.',website='http://www.apress.com/')

更新数据:
方法一:

p1.name = 'Apress Publishing'
p1.save()

方法二:

Publisher.objects.filter(id=1).update(name='Apress Publishing')


注意:
第一种方法更新数据库中所有的字段,
生成数据库语句是:
UPDATE book_publisher SET
name = 'Apress Publishing',
address = '2855 Telegraph Ave.',
city = 'Berkeley',
state_province = 'CA',
country = 'U.S.A.',
website = 'http://www.apress.com'
WHERE id = 52;

第二种数据库语句是:
UPDATE books_publisher
SET name = 'Apress Publishing'
WHERE id = 52;

更新所有记录

Publisher.objects.all().update(country='USA')


下面是选择对象:

Publisher.objects.all() 选择所有
Publisher.objects.filter(name= ‘ Apress ’ ) 数据过滤
Publisher.objects.filter(name__contains="press")
Publisher.objects.get(name= “ Apress ” ) 获取单个对象


注意: filter()`` 函数返回一个记录集,这个记录集是一个列表 QuerySet 。相对列表来说,有些时候我们更需要获取单个的对 象, 用 `` get()`` 方法。
Get ()方法:
如果结果是多个对象,会导致抛出异常;
如果查询没有返回结果也会抛出异常。
contains转换成数据库语句是like

下面是删除对象:
p = Publisher.objects.get(name="dddddddddddd")
p.delete()
或者
Publisher.objects.filter(country='USA').delete()
Publisher.objects.all().delete()

下面是访问外键---一对多访问:
b = Book.objects.get(id= 1 )
b.publisher
b.publisher.website
访问外键---多对一访问:
p = Publisher.objects.get(name='Apress Publishing')
p.book_set.all()
p.book_set.filter(name__icontains='django')
访问外键---多对多访问:
b = Book.objects.get(id= 2 )
b.authors.all()
b.authors.filter(first_name='Adrian')
b.authors.filter(first_name='Adam')
访问外键---多对多访问(反向):
a = Author.objects.get(first_name='Adrian', last_name='Holovaty')
a.book_set.all()

大家可能纳闷什么时候用xxx_set来得到想要的对象呢?
其实可以回去看看models.py,其中book中有这两句:
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
所以当模型中有约束则用b.publisher和b.authors.all(),相反模型中没有约束就用a.book_set.all()等。

运维网声明 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-368298-1-1.html 上篇帖子: 对比java和python 下篇帖子: Python 开发工具 Pydev
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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