Python流行ORM框架sqlalchemy的简单使用

 更新时间:2021年07月14日 09:29:54   作者:吾心依旧  
这篇文章主要介绍了Python流行ORM框架sqlalchemy的简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

安装

http://docs.sqlalchemy.org

1、安装

#进入虚拟环境
#执行
./python3 -m pip install

import sqlalchemy
print(sqlalchemy.__version__) # 1.1.15
我这里使用的版本是1.1.15

创建连接对象

http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#connecting

from sqlalchemy import create_engine
# 连接本地test数据库
engine = create_engine("mysql://root:root@localhost/test?charset=utf8")

运行时会出错,因为需要驱动库,默认会调用MySQLdb。

ImportError: No module named 'MySQLdb'

我们前面安装了pymysql,因此完整的要这么写:

engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8")

简单使用

SQL语句查询

result = engine.execute("select * from news")
print(result.fetchall())
#[(1, '本机新闻标题'), (2, '今天的新闻'), (3, '新闻标题1'), (4, '新闻标题2'), (5, '元组新闻1'), (6, '元组新闻2')]

创建映射

既然我们用ORM,就是为了少写甚至不写SQL语句。

ORM是数据表和对象之间的映射。

http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#declare-a-mapping

1、创建一个Infos.py文件,这个文件我们来做数据表的映射

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String
class News(Base):
# 表名称
__tablename__ = 'news'
# news表里id字段
id = Column(Integer, primary_key=True, autoincrement=True)
# news表里title字段
title = Column(String(length=255), nullable=False)

News类就是我们数据表news的映射(字段:id、title)。

2、使用

from sqlalchemy import create_engine
from mappers.Infos import News
from sqlalchemy.orm import sessionmaker
# 连接本地test数据库
engine = create_engine("mysql+pymysql://root:root@localhost/test?charset=utf8")
# 创建会话
session = sessionmaker(engine)
mySession = session()
# 查询结果集
result = mySession.query(News).all()
print(result[0])

我们要注意最后的查询结果,看看结果集中的元素长什么样?^_^

<mappers.Infos.News object at 0x1050c6e80>

查询处理的记录都是对象。

各种查询

只查询第一条记录

# 查询第一条
result = mySession.query(News).first()
print(result.title) #打印对象属性
通过id字段查询

# 查询id为2的
result = mySession.query(News).filter_by(id=2).first()
print(result.title)
# 查询id为2的
result = mySession.query(News).filter(News.id==2).first()
分页查询

# 分页查询 0,2
result = mySession.query(News).filter(News.id>1).limit(2).offset(0).all()
print(result)
自定义过滤条件

# 自定义过滤条件
result = mySession.query(News).filter(text("id>:id")).params(id=2).all()

根据主键查询

result = mySession.query(News).get(3)
print(result.title)

新增和修改

# 新增
news = News(title="新增测试标题")
mySession.add(news)
mySession.commit()
#修改
mySession.query(News).filter(News.id==7).update({"title":"修改之后的标题"})
mySession.commit()

Python利用sqlacodegen自动生成ORM实体类示例

前面方法我们是手动创建了一个名叫Infos.py的文件,然后定义了一个News类,把这个类作为和我们news数据表的映射。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String
class News(Base):
# 表名称
__tablename__ = 'news'
# news表里id字段
id = Column(Integer, primary_key=True, autoincrement=True)
# news表里title字段
title = Column(String(length=255), nullable=False)

现在我们来看看sqlacodegen这个工具,自动生成像上面那样的类文件。

1、安装sqlacodegen

#cd 项目虚拟环境
#执行
./python3 -m pip install sqlacodegen

2、使用sqlacodegen生成案列

#注意还是在虚拟环境目录下执行
./sqlacodegen --tables fund --outfile ../../mappers/Found.py mysql+pymysql://root:root@localhost/test?charset=utf8

到此这篇关于Python流行ORM框架sqlalchemy的文章就介绍到这了,更多相关Python ORM框架sqlalchemy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python中dbm模块和shelve模块的使用

    详解Python中dbm模块和shelve模块的使用

    这篇文章主要为大家详细介绍了Python中dbm模块和shelve模块的具体用法,文中的示例代码简洁易懂,对我们深入学习Python有一定的帮助,需要的可以参考下
    2023-10-10
  • python实现拉普拉斯特征图降维示例

    python实现拉普拉斯特征图降维示例

    今天小编就为大家分享一篇python实现拉普拉斯特征图降维示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实战之德州扑克第二步-判断牌型

    python实战之德州扑克第二步-判断牌型

    这篇文章主要介绍了python实战之德州扑克第二步-判断牌型,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python入门之三角函数tan()函数实例详解

    Python入门之三角函数tan()函数实例详解

    这篇文章主要介绍了Python入门之三角函数tan()的相关内容,介绍了tan()函数的描述,语法以及简单实例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Python+pandas计算数据相关系数的实例

    Python+pandas计算数据相关系数的实例

    今天小编就为大家分享一篇Python+pandas计算数据相关系数的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python中static相关知识小结

    Python中static相关知识小结

    static用法:是一个修饰符,用于修饰成员(成员变量,成员函数).当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式——类名.静态成员。
    2018-01-01
  • 一文带你掌握Python内置reversed函数的使用

    一文带你掌握Python内置reversed函数的使用

    Python作为一门强大的编程语言,提供了许多内置函数来处理各种数据结构和对象,本文将详细探讨reversed函数的用法、示例代码以及实际应用场景,需要的可以参考下
    2024-01-01
  • Python实现顺序查找的示例代码

    Python实现顺序查找的示例代码

    顺序查找(Sequential Search)是一种简单直观的搜索算法,用于在无序数组中查找特定元素,本文将介绍顺序查找的基本原理,并通过Python代码进行详细讲解,需要的可以参考一下
    2023-08-08
  • 详解Django模版中加载静态文件配置方法

    详解Django模版中加载静态文件配置方法

    这篇文章主要介绍了Django模版中加载静态文件配置方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Python调用pyttsx3实现离线文字转语音的方式

    Python调用pyttsx3实现离线文字转语音的方式

    pyttsx3是 Python 中的文本到语音的离线转换库,本文给大家介绍Python调用pyttsx3实现离线文字转语音的方式,感兴趣的朋友一起看看吧
    2024-03-03

最新评论