ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。

SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。支持多数据库,如mysql、Oracle等

安装:

pip3 install sqlalchemy

使用步骤:

l   建立数据库连接
l   描述表结构(如果表不存在则会新建表)
l   得到数据库操作游标(会话session)
l   操作数据表,提供了两种方法,分别为原生SQL语句操作(execute)和类方式操作

通过原生SQL语句操作

 1 #导入必要模块
 2 from sqlalchemy import create_engine
 3
 4 #得到连接对象
 5 #参数:mysql+pymysql://用户名:密码@地址/数据库名
 6 #添加参数 echo=True 表示打印日志到控制台
 7 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",encoding='utf-8')
 8
 9 #查询
10 resselect=connal.execute("select * from tb_dong")
11 print(resselect.rowcount) #输出查询到的值
12 print(resselect.fetchall()) #输出列表数据
13
14 #插入,输出影响行数
15 resinsert=connal.execute("insert into tb_dong(namex,sex) values('%s','%s')"%("东小东xx","F")).rowcount
16 print(resinsert)

类方式操作

描述表结构时:

设置为主键【primary_key=True】、

是否可为空【nullable=False】、

外键【ForeignKey(“另一个表名.字段名”)】 #表名与字段名的点不可去掉

 1 #导入必要模块
 2 import sqlalchemy
 3 from sqlalchemy import create_engine
 4 from sqlalchemy.ext.declarative import declarative_base
 5 from sqlalchemy import Column, Integer, String
 6 from sqlalchemy.orm import sessionmaker
 7
 8
 9 #-------------得到连接对象--------------------
10 #参数:mysql+pymysql://用户名:密码@地址/数据库名
11 #添加参数 echo=True 表示打印日志到控制台
12 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",
13                        encoding='utf-8')
14
15 #----------------创建表,描述表结构-----------------------
16 #得到基类
17 classal = declarative_base()
18 class tb_dong3(classal):
19     __tablename__ = "tb_dong3"  # 表名为 tb_dong3
20     id = Column(Integer, primary_key=True)  # 设置列为主键,默认不可为空且自增
21     name = Column(String(15))
22     password = Column(String(15))
23
24     def __repr__(self):
25         return "<id=%s ; name=%s ; password=%s>"%(self.id,self.name,self.password)
26
27 #提交创建表命令
28 classal.metadata.create_all(connal)
29
30 #------------------ 游标获取  ------------------
31
32 #得到数据库游标
33 cousession=sessionmaker(bind=connal)()
34
35 #--------------------插入数据------------------
36 #设置要插入的数据
37 dataobj1=tb_dong3(name="dong",password="dongpp东1")
38 dataobj2=tb_dong3(name="dong",password="dongpp东2")
39
40 #添加数据,参数可为列表:add([dataobj1, dataobj1])
41 cousession.add(dataobj1)
42 cousession.add(dataobj2)
43
44 #提交数据
45 cousession.commit()
46
47 #--------------------查询数据---------------------
48 #filter(tb_dong3.id>1)为条件查询
49 #多条件查询可以使用多个 filter 拼接
50 #查询所有:all()  查询一个:first()  计数:count()
51 resdata=cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").all() #查询所有
52 print(resdata) #输出全部查询结果
53 #print(cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").count()) #查询所有
54 print(len(resdata)) #得到查询结果的数量,相当于上面一句
55 print(resdata[0].name) #取出name值
56
57 #-----------------  更新--------------------------
58 #先查询,然后赋值,然后提交
59 resupdate=cousession.query(tb_dong3).filter(tb_dong3.id==3).first()
60 resupdate.name="ddddddddd"
61 resupdate.password="xxxxxx"
62 cousession.commit()
63
64 #-------------------  删除  -----------------------
65 resdel=cousession.query(tb_dong3).filter(tb_dong3.id==73).first()
66 cousession.delete(resdel)
67 cousession.commit()

连表操作:

重点在于需要描述两张表

 1 #导入必要模块
 2 from sqlalchemy import create_engine
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy import Column, Integer, String
 5 from sqlalchemy.orm import sessionmaker
 6
 7
 8 #-------------得到连接对象--------------------
 9 #参数:mysql+pymysql://用户名:密码@地址/数据库名
10 #添加参数 echo=True 表示打印日志到控制台
11 connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",
12                        encoding='utf-8')
13
14 #----------------创建表,描述表结构-----------------------
15 #得到基类
16 classal = declarative_base()
17 #建立tb_dong3表描述
18 class tb_dong3(classal):
19     __tablename__ = "tb_dong3"  # 表名为 tb_dong3
20     id = Column(Integer, primary_key=True)  # 设置列为主键,默认不可为空且自增
21     name = Column(String(15))
22     password = Column(String(15))
23
24     def __repr__(self):
25         return "<id=%s ; name=%s ; password=%s>"%(self.id,self.name,self.password)
26
27 #建立tb_dong2表描述
28 class tb_dong2(classal):
29     __tablename__ = "tb_dong2"  # 表名为 tb_dong3
30     id = Column(Integer, primary_key=True)  # 设置列为主键,默认不可为空且自增
31     name = Column(String(10))
32     sex = Column(String(1))
33
34     def __repr__(self):
35         return "<id=%s ; name=%s ; sex=%s>"%(self.id,self.name,self.sex)
36
37 #提交创建表命令
38 classal.metadata.create_all(connal)
39
40 #------------------ 游标获取  ------------------
41
42 #得到数据库游标
43 cousession=sessionmaker(bind=connal)()
44
45 #-------------------- 连表查询 ---------------------
46 #tb_dong3.name==tb_dong2.name 两表的name字段值相等
47 #得到单表数据(tb_dong2)
48 #resdata=cousession.query(tb_dong2).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()
49 #输出两张表的数据(tb_dong2,tb_dong3)
50 resdata=cousession.query(tb_dong2,tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()
51 print(resdata) #输出全部查询结果
52 print(len(resdata)) #得到查询结果的数量,相当于上面一句
53 print(resdata[0][0].name) #取出name值

转载于:https://www.cnblogs.com/dongxiaodong/p/10495642.html

Python的数据库操作(Sqlalchemy)相关推荐

  1. python的数据库操作_Python对数据库操作

    Windows下安装MySQL-python linux下安装MySQL-python以连接MySQL: 解压后,进入目录下,执行python setup.py install 安装过程中,常会遇到的 ...

  2. python导入数据库操作

    python导入数据库操作 一.单次导入 1.python导入数据库 2.创建一个数据库对象 3.对数据库记录进行操作 4.定义sql语句操作数据,插入记录 5.提交请求 6.把手伸回来 7.关上门 ...

  3. Python - MySQL数据库操作

    Python2 中使用模块 MySQLdb 模块处理数据库的操作,在Python3中使用 PyMySQL Python2 - 数据库的操作 1. MySQLdb 安装 yum -y install M ...

  4. Python Mysql 数据库操作

    2019独角兽企业重金招聘Python工程师标准>>> 本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或 ...

  5. python封装数据库操作_Python3 数据库操作小封装

    import pymysql ''' SQLController:对数据库操作 私有: __sql_connect(self): 作用:建立数据库连接 返回:数据库连接对象 __sql_insert_ ...

  6. python mysql数据库操作grid控件_Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能...

    1 环境搭建 1.1 Python安装 本文具体实现部分Python环境:Python2.7.14,64位版本 附:配置PythonIDE,推荐PyCharm(具体IDE界面见下图),下载点击运行即可 ...

  7. python SQLite数据库操作

    SQLite SQLite是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关.SQLi ...

  8. python oracle数据库操作_Python连接oracle数据库的基本操作

    1 #导入cx_Oracle模块 2 importcx_Oracle as cx3 ​4 #连接数据库 5 db = cx.connect('username/password@host/orcl') ...

  9. python随机数据库_Python实现生成随机数据插入mysql数据库的方法

    本文实例讲述了Python实现生成随机数据插入mysql数据库的方法.分享给大家供大家参考,具体如下: 运行结果: 实现代码: import random as r import pymysql fi ...

最新文章

  1. 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
  2. 作用域变量 var
  3. Linux 开机显示:welcome to emergency mode
  4. PMP知识点(四、进度管理)
  5. python+selenuim自动化测试(六)上传文件
  6. 在华为云ECS上手工通过Docker部署tomcat
  7. of介词短语作定语_介词短语用作状语/定语/表语/复合宾语
  8. OpenShift / RHEL / DevSecOps 汇总目录
  9. 机器学习与深度学习基础概念介绍
  10. Xshell远程连接Linux无法成功连接
  11. Windows电脑上有哪些好用的txt小说阅读器?
  12. 张正友标定法过程推导笔记
  13. 职业规划路线(研究生阶段)
  14. linux使用dd命令生成指定大小文件
  15. java最小因子_一个整数的所有最小因子
  16. python 当前时间的毫秒时间戳转换为 年-月-日 时:分:秒
  17. LeetCode 13 罗马符号转化为数字(难度: Easy)
  18. js vue 设置excel单元格样式_vue+elementui 项目纯前端Export2Excel导出excel,并利用xlsx-style设置单元格样式...
  19. 学会Python就能做游戏脚本开发?别天真了!
  20. RISC_V(0) 指令集架构

热门文章

  1. 基于Golang的简单web服务程序开发——CloudGo
  2. Object的finalize()方法的作用是否与C++的析构函数作用相同
  3. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别
  4. linux vi编辑 整理
  5. 大三Java后端暑期实习面经总结——JVM篇
  6. 深度卷积生成对抗网络
  7. GitHub上YOLOv5开源代码的训练数据定义
  8. JavaWeb--过滤器
  9. 2021年大数据ELK(五):Elasticsearch中的核心概念
  10. 2021年大数据Hive(八):Hive自定义函数