`
amateurlee
  • 浏览: 8773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flask入门之SQLAlchemy数据库连接操作(第15讲)【转】

 
阅读更多

转载自:http://www.cnblogs.com/wongbingming/p/6831448.html

 

一、库安装

Flask-SQLAlchemy    2
SQLAlchemy    1.0.8

二、进入venv

三、切换到项目Sample\ 文件夹,进入manager.py 的shell

python manager.py shell

四、创建data.sqlite数据库

from app import db
from app import models
db.create_all()

  执行完最后一条命令后,在Sample\app下就会生成一个data.sqlite文件

 

五、在Pycharm中导入数据库,方便可视化

  Data Source -> Sqlite(Xerial)

  

  然后进行如下操作

  

  点击OK后,会发现已经导入成功了

  

 

六、在shell模式下操作数据

  1. 增(写入数据)

复制代码
>>> from app import db
>>> from app import models
>>> from app.models import User,Role
>>> admins = Role(name='administrators')
>>> mod = Role(name='moderator')
>>> db.session.add(admins)
>>> db.session.add(mod)
>>> db.session.commit()

#或者两条一起添加
#db.session.add([admins,mod])
复制代码

 

  注意,对数据库增删改查,都必须进行commit()方法才能写入数据库。

  现在来查看下,到底有没有写入?双击roles表,看到了我们写入的两行记录

 

  2. 删(删除数据)

复制代码
# 说明一下:表的每行记录都是一个对象
# 例如上面:admins和mod都是对象,name是其属性

>>> admins.name
u'administrators'

# 为什么说明这点,因为删除行就是删除对象

>>> db.session.delete(admins)
>>> db.session.commit()

# 删除成功
复制代码

  3.改(修改数据)  

# 通过对属性重新赋值,添加,提交事务进行修改数据

mod.name='moderators-new'
db.session.add(mod)
db.session.commit()

 

 

  4. 查(查询数据)

复制代码
# query返回的是包含所有记录的查询对象(BaseQuery)
>>> Role.query
<flask_sqlalchemy.BaseQuery object at 0x0000000004936E10>

# query之后如果需要对记录进行条件筛选,要加上过滤函数,返回过滤后的查询对象(BaseQuery),可以多次执行过滤函数
>>> Role.query.filter_by(name='admins')
<flask_sqlalchemy.BaseQuery object at 0x0000000004A2C438>

# 过滤函数之后,加执行函数,返回是记录对象(如果是多行怎么办),赋值为一个对象名Admin
>>> Role.query.filter_by(name='administrators').first()
<app.models.Role object at 0x0000000004A13F98>

#Admin对象的属性,就相当于单元格的值
>>> Admin = Role.query.filter_by(name='administrators').first()
>>> Admin.name
u'administrators'
复制代码

 

 

  5. 表之间的关联

还记得我们之前定义models.py中的Role和User类时,那个relationship吗,关键是参数backref

先来看看我们Role表中的对象admins,name=administrator,id为3

我们知道这个Role表中的id和User表中的role_id(外键)是对应连接的。

那我们在往User表写入数据的时候,还要写入对应的role_id,有个一步到位的方法,就是把Role行的对象作为参数传给定义类时backref的值(这里是role)

他就会自动获取id,并传给role_id

  执行代码

>>> Bikmin = User(name='Bikmin',roles=admins)
>>> db.session.add(Bikmin)
>>> db.session.commit()

  看看效果,role_id为3,对应上了

 

 

  这里说一下,query()和get()的区别

1. query() 返回所有记录的查询对象

2. get() 使用的主键查询

  示例

>>> Role.query.get(2).name
u'moderator'

 

返回的是moderator,和id一样

 

   要讲SQLAlchemy查询语句转成原生的SQL语句,只需用str()即可

str(Role.query.filter_by(name='administrators').all())

 

  

   如果在第一次使用shell会话的时候,创建了行的Python对象,那么再关闭Shell后,再打开,这些对象不能再使用,必须重新创建

admins = Role.query.filter_by(name='administrators').first()

 

 

分享到:
评论

相关推荐

    flask python

    - **数据库连接**:确保每次请求都能获得有效的数据库连接。 - **视图函数**:编写处理请求的视图函数。 - **模板**:创建模板文件来生成前端界面。 - **样式添加**:使用CSS来美化应用的外观。 - **测试应用程序**...

    flask-palletsprojects-com-en-1.1.x.pdf Flask 官方文档

    14. **扩展**:Flask生态系统中有许多第三方扩展,如SQLAlchemy用于数据库操作,Flask-WTF用于表单处理,Flask-SocketIO用于实时通信等。这些扩展极大地丰富了Flask的功能。 15. **命令行接口**:Flask提供了一个...

    flask 中文手册

    - **数据库初始化**:通过SQLAlchemy ORM创建数据库模型,并设置数据库连接。 - **构建应用逻辑**:逐步构建Flaskr应用的核心逻辑,包括路由、视图函数等。 - **数据库操作**:介绍如何执行数据库查询、插入等操作。...

    flask-tutorial:烧瓶练习博客

    10. SQLAlchemy集成:Flask可以通过SQLAlchemy扩展与数据库交互,它是Python的ORM库,支持多种数据库。 11. 数据模型定义:定义类继承`sqlalchemy.Model`,并用`Column`定义字段,如`class User(db.Model): name = ...

    sqlalchemy-challenge:气候分析

    使用SQLAlchemy create_engine连接到您的sqlite数据库。 使用SQLAlchemy automap_base()将表反映到类中,并保存对称为Station and Measurement的那些类的引用。 ###降水分析 设计查询以检索最近12个月的降水...

    python 零基础学习篇-15课程:网站开发基础(上).zip

    我们可能会学习如何使用SQLAlchemy这样的ORM(对象关系映射)库,它简化了数据库操作,使我们能够用Python代码处理数据库记录。 除此之外,我们还将讨论用户认证和授权。在大多数Web应用中,保护用户信息和实现用户...

    Python编程金典

    10. **数据持久化**:介绍数据库操作,包括SQLite、MySQL等,以及ORM(对象关系映射)框架如SQLAlchemy。 11. **Web开发**:讲解如何使用Flask或Django框架开发Web应用,包括路由、模板引擎、表单处理和数据库集成...

    Python3零起点教程-廖雪峰.pdf

    #### 十五、总结 - **学习路径规划**:根据个人兴趣和发展方向制定合理的学习计划。 - **常见问题解答**:针对学习过程中遇到的问题提供解决方案。 - **资源推荐**:推荐进一步学习的书籍、网站等资源。 本教程旨在...

    廖雪峰python教程打印版(完整版)(.pdf)

    廖雪峰的教程中会介绍如何使用SQLite、MySQL、SQLAlchemy等工具来访问和操作数据库。 18. Web开发 Web开发部分介绍了HTTP协议、HTML、WSGI接口、使用Web框架和模板等内容。Python中的Django、Flask等框架为快速开发...

    (知识引用自)廖雪峰-JavaScript-Python-Git-教程-by-it-ebooks-_z-lib.org_1

    22. **数据库编程**:SQLite、MySQL连接和操作,SQLAlchemy ORM。 23. **正则表达式**:用于字符串匹配和搜索。 24. **常用内建模块**:如collections模块提供高级数据结构,base64和struct用于数据编码解码,...

    Python基础知识—第一天.txt

    - **数据库编程**: 通过SQLAlchemy等库与数据库交互。 - **快速原型**: 快速搭建项目原型,验证想法。 - **数学及科学计算**: 如NumPy、SciPy等库支持复杂的数学运算。 - **人工智能**: 利用TensorFlow、PyTorch等库...

    从Python入门到Python:2021年是您想要学习python的一年吗? 如果是这样,让我们​​这样做吧!

    9. **数据库交互**:了解SQL基础知识,使用Python的sqlite3库或更高级的ORM(如SQLAlchemy)与数据库进行交互。 10. **数据分析和可视化**:使用Pandas进行数据清洗和分析,Matplotlib和Seaborn进行数据可视化。 ...

Global site tag (gtag.js) - Google Analytics