`
liumayulingyan
  • 浏览: 154669 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

python数据库模型总结

阅读更多
先看一下数据库模型之间的对应关系:
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') 


[color=red]注意:
第一种方法更新数据库中所有的字段,
生成数据库语句是:
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; 
[/color]

更新所有记录
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()等。

0
0
分享到:
评论

相关推荐

    Python pymysql 数据库模型封装类(python3.7)

    Python pymysql dbmodelClass数据库模型封装类(python version 3.7)

    python面试数据库框架笔记总结

    接着,我们来讨论几个常用的Python数据库框架: 1. **SQLite3**:这是Python的标准库之一,无需服务器,轻量级,适合小型应用或测试。面试时可能会询问如何创建数据库、表,以及如何进行CRUD(创建、读取、更新、...

    Python数据库的链接

    它们允许开发者定义数据库模型,就像定义Python类一样,然后自动将这些模型转换为相应的SQL语句。这种方式更加面向对象,可读性更强,且易于维护。 4. **连接管理**:在处理数据库时,确保正确地打开和关闭连接至关...

    数据库实战资源:Python数据库实战(第2版)源代码

    《Python数据库实战(第2版)》是一本深入探讨如何使用Python进行数据库操作的书籍,其源代码资源为读者提供了丰富的实践素材。Python作为一种多用途的编程语言,不仅在Web开发、数据分析等领域广泛应用,也在数据库...

    python+sql sever 数据库系统大作业实验 教学信息管理系统

    通过ER图,我们可以更好地理解数据模型和实体间的联系,为后续的数据库创建和使用奠定基础。 SQL建库源码是用于创建这些表的SQL语句集合,包括CREATE TABLE语句来定义表结构,以及可能的INDEX和FOREIGN KEY约束来...

    Python数据库操作:SQLAlchemy教程

    ### Python数据库操作:SQLAlchemy教程 #### 一、Python环境搭建与SQLAlchemy安装 ##### 1.1 Python环境搭建 **原理与内容:** - **Python简介:**Python是一种广泛使用的高级编程语言,以其简洁和易读性著称。...

    数据库mysql基本知识以及在python上的使用

    关系型数据库采用关系模型,即二维表格形式,包含数据表、记录和字段。数据表是存放数据的表格,记录由多个字段组成,每个字段表示数据的含义。MySQL在Ubuntu上可以通过`apt-get`命令安装,而在Windows系统中则需...

    Python数据库操作库研究.zip

    本资料"Python数据库操作库研究.zip"可能包含了一篇详细探讨这些库的PDF文档,让我们深入了解一下其中可能涉及的关键知识点。 1. **SQLite**:SQLite是一个轻量级的嵌入式数据库,无需单独服务器进程,可以直接在...

    用Python实现数据库编程

    DAO(Data Access Objects)是一种早期的数据访问技术,它允许程序员通过对象模型来访问存储在Microsoft Jet数据库引擎中的数据。尽管DAO可能被认为是过时的技术,但在某些场景下依然有用武之地。 ##### 实现步骤:...

    Python的Flask框架与数据库连接的教程

    在数据库模型部分,我们学习了如何定义数据库模型,这是通过创建Python类并将它们映射到数据库表中来实现的。在模型中,每个属性都可以映射到一个数据库字段,并且可以指定字段类型和大小等属性。模型中的id字段通常...

    物业管理系统,python数据库课程设计

    总之,"物业管理系统,Python数据库课程设计"涵盖了Python Web开发和数据库管理的核心概念,包括Python Web框架的使用、SQL Server数据库的设计与操作、以及安全性和性能优化等多方面知识。对于学习者来说,这是一个...

    Python基于Django图书管理系统源码(含数据库脚本).rar

    这个系统涵盖了Web开发中的许多关键概念和技术,包括模型-视图-控制器(MVC)架构、数据库交互、用户认证与授权、表单处理和模板渲染等。 首先,Django是Python的一款流行Web开发框架,它遵循MTV(Model-Template-...

    Python操作三大主流数据库 实战网易新闻客户端(完整15章全)

    理解关系型数据库模型和SQL语言,它是与数据库沟通的语言。 3. **Python数据库接口**: - **sqlite3模块**:Python内置的SQLite库,无需额外安装,适用于轻量级应用或开发测试。学习如何创建连接、执行SQL语句、...

    Wind_Python-master.zip_FamaFench 三因子、五因子模型

    通过以上步骤,我们可以利用Python实现Fama-French模型,进行资产定价分析,这对于投资策略的制定和风险管理具有重要意义。在金融研究和实践中,这些模型被广泛应用于检验市场效率、构建投资组合和评估投资策略的...

    Python项目案例开发从入门到实战源代码第3章 数据库应用——智力问答测试

    1. **Python数据库接口**:Python提供了多种数据库接口,如SQLite、MySQLdb、pymysql、psycopg2等。在这个项目中,我们可能会使用到SQLite,这是一个轻量级的嵌入式数据库,适合小型应用和学习用途。 2. **SQLite...

    基于Tensorflow搭建CNN卷积神经网络+CK数据库实现表情识别python源码+模型.zip

    基于Tensorflow搭建CNN卷积神经网络+CK数据库实现表情识别python源码+模型.zip基于Tensorflow搭建CNN卷积神经网络+CK数据库实现表情识别python源码+模型.zip基于Tensorflow搭建CNN卷积神经网络+CK数据库实现表情识别...

    Python 数据库工具包.zip

    SQLAlchemy Python SQL 工具包和对象关系映射器介绍SQLAlchemy 是 Python SQL 工具包和对象关系映射器,它为应用程序开发人员提供了 SQL 的全部功能和灵活性。SQLAlchemy 提供了一整套众所周知的企业级持久性模式,...

    基于python的英汉电子词典软件源码数据库.zip

    《基于Python的英汉电子词典软件源码数据库解析》 在信息技术日益发达的今天,电子词典已经成为了学习者的重要工具。而基于Python开发的英汉电子词典软件源码数据库,则为开发者提供了一个宝贵的资源,使得我们可以...

    精选_基于Python的数据库实现_源码打包

    在IT领域,数据库管理系统是至关重要的工具,它们用于存储、管理、检索和更新数据。而Python作为一种强大且易学...通过深入研究这些源代码,你可以提升自己在Python数据库开发方面的技能,更好地理解和应用数据库技术。

    Python 实现的一个将数据库的数据进行可视化显示的图表,使用流行的canvasjs前端组件,带动画,漂亮实用且易集成

    本项目利用Python结合流行的前端组件CanvasJS,实现了从SQLite数据库中提取数据并以动画效果展示的动态图表,具有美观、实用且易于集成的特点。 首先,我们要了解Python中的数据处理库。在这个项目中,可能使用了`...

Global site tag (gtag.js) - Google Analytics