Python的数据库操作(Sqlalchemy)
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。支持多数据库,如mysql、Oracle等
安装:
- pip3 install sqlalchemy
使用步骤:
- l 建立数据库连接
- l 描述表结构(如果表不存在则会新建表)
- l 得到数据库操作游标(会话session)
- l 操作数据表,提供了两种方法,分别为原生SQL语句操作(execute)和类方式操作
通过原生SQL语句操作
- #导入必要模块
- from sqlalchemy import create_engine
- #得到连接对象
- #参数:mysql+pymysql://用户名:密码@地址/数据库名
- #添加参数 echo=True 表示打印日志到控制台
- connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",encoding='utf-8')
- #查询
- resselect=connal.execute("select * from tb_dong")
- print(resselect.rowcount) #输出查询到的值
- print(resselect.fetchall()) #输出列表数据
- #插入,输出影响行数
- resinsert=connal.execute("insert into tb_dong(namex,sex) values('%s','%s')"%("东小东xx","F")).rowcount
- print(resinsert)
类方式操作
描述表结构时:
设置为主键【primary_key=True】、
是否可为空【nullable=False】、
外键【ForeignKey(“另一个表名.字段名”)】 #表名与字段名的点不可去掉
- #导入必要模块
- import sqlalchemy
- from sqlalchemy import create_engine
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String
- from sqlalchemy.orm import sessionmaker
- #-------------得到连接对象--------------------
- #参数:mysql+pymysql://用户名:密码@地址/数据库名
- #添加参数 echo=True 表示打印日志到控制台
- connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",
- encoding='utf-8')
- #----------------创建表,描述表结构-----------------------
- #得到基类
- classal = declarative_base()
- class tb_dong3(classal):
- __tablename__ = "tb_dong3" # 表名为 tb_dong3
- id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增
- name = Column(String(15))
- password = Column(String(15))
- def __repr__(self):
- return "<id=%s ; name=%s ; password=%s>"%(self.id,self.name,self.password)
- #提交创建表命令
- classal.metadata.create_all(connal)
- #------------------ 游标获取 ------------------
- #得到数据库游标
- cousession=sessionmaker(bind=connal)()
- #--------------------插入数据------------------
- #设置要插入的数据
- dataobj1=tb_dong3(name="dong",password="dongpp东1")
- dataobj2=tb_dong3(name="dong",password="dongpp东2")
- #添加数据,参数可为列表:add([dataobj1, dataobj1])
- cousession.add(dataobj1)
- cousession.add(dataobj2)
- #提交数据
- cousession.commit()
- #--------------------查询数据---------------------
- #filter(tb_dong3.id>1)为条件查询
- #多条件查询可以使用多个 filter 拼接
- #查询所有:all() 查询一个:first() 计数:count()
- resdata=cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").all() #查询所有
- print(resdata) #输出全部查询结果
- #print(cousession.query(tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name=="dong").count()) #查询所有
- print(len(resdata)) #得到查询结果的数量,相当于上面一句
- print(resdata[0].name) #取出name值
- #----------------- 更新--------------------------
- #先查询,然后赋值,然后提交
- resupdate=cousession.query(tb_dong3).filter(tb_dong3.id==3).first()
- resupdate.name="ddddddddd"
- resupdate.password="xxxxxx"
- cousession.commit()
- #------------------- 删除 -----------------------
- resdel=cousession.query(tb_dong3).filter(tb_dong3.id==73).first()
- cousession.delete(resdel)
- cousession.commit()
连表操作:
重点在于需要描述两张表
- #导入必要模块
- from sqlalchemy import create_engine
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String
- from sqlalchemy.orm import sessionmaker
- #-------------得到连接对象--------------------
- #参数:mysql+pymysql://用户名:密码@地址/数据库名
- #添加参数 echo=True 表示打印日志到控制台
- connal = create_engine("mysql+pymysql://root2:proot2@192.168.1.175/dongdb",
- encoding='utf-8')
- #----------------创建表,描述表结构-----------------------
- #得到基类
- classal = declarative_base()
- #建立tb_dong3表描述
- class tb_dong3(classal):
- __tablename__ = "tb_dong3" # 表名为 tb_dong3
- id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增
- name = Column(String(15))
- password = Column(String(15))
- def __repr__(self):
- return "<id=%s ; name=%s ; password=%s>"%(self.id,self.name,self.password)
- #建立tb_dong2表描述
- class tb_dong2(classal):
- __tablename__ = "tb_dong2" # 表名为 tb_dong3
- id = Column(Integer, primary_key=True) # 设置列为主键,默认不可为空且自增
- name = Column(String(10))
- sex = Column(String(1))
- def __repr__(self):
- return "<id=%s ; name=%s ; sex=%s>"%(self.id,self.name,self.sex)
- #提交创建表命令
- classal.metadata.create_all(connal)
- #------------------ 游标获取 ------------------
- #得到数据库游标
- cousession=sessionmaker(bind=connal)()
- #-------------------- 连表查询 ---------------------
- #tb_dong3.name==tb_dong2.name 两表的name字段值相等
- #得到单表数据(tb_dong2)
- #resdata=cousession.query(tb_dong2).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()
- #输出两张表的数据(tb_dong2,tb_dong3)
- resdata=cousession.query(tb_dong2,tb_dong3).filter(tb_dong3.id>0).filter(tb_dong3.name==tb_dong2.name).all()
- print(resdata) #输出全部查询结果
- print(len(resdata)) #得到查询结果的数量,相当于上面一句
- print(resdata[0][0].name) #取出name值
Python的数据库操作(Sqlalchemy)的更多相关文章
- python之数据库操作(sqlite)
python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...
- python sqlite3 数据库操作
python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...
- 10分钟教你Python+MySQL数据库操作
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...
- python之数据库操作
数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux: yum install MySQL-python window: http://files ...
- [Python]MySQLdb for Python使用指南/Python的数据库操作
网站就是要和数据库进行交互,否则什么都不用做了...今天我们来看一个叫MySQLdb的库,这个用来和MySQL数据库进行交互.可以从这里获得这个库http://sourceforge.net/proj ...
- Python的数据库操作(pymysql)
使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等.其可操作性很强,如可以直接使用“show databases”.“show tables”等语句进行表格之 ...
- Python的数据库操作
使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等.其可操作性很强,如可以直接使用“show databases”.“show tables”等语句进行表格之 ...
- Python Django 数据库操作
1. 建立app 在自己的工程项目目录下输入: python manage.py startapp myapp(你想建立的app名称) 建立一个叫myapp的app 这样,在你的工程项目目录下会出现一 ...
- python mysql数据库操作
一.pymysql 模块安装(本文博客推荐:https://www.cnblogs.com/clschao/articles/10023248.html) pip3 install pymysql 二 ...
随机推荐
- mac抓包工具anyproxy
本文以 mac为代理,ios手机为客户端举例. 文档地址:http://anyproxy.io/ 1.环境配置: 安装 node :参考 https://www.jianshu.com/p/3 ...
- SpringBoot-目录及说明
今天开始抽时间整理SpringBoot的内容这里可以作为一个目录及说明相关的资料都可以跳转使用 说明: 目录: 一:创建SpringBoot项目 1)Maven创建 (1)使用命令行创建Maven工程 ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165319
安装kali 我从网上找了相应教程一步一步跟着走,教程链接:(https://blog.csdn.net/qq_40950957/article/details/80468030) 安装成功: 配置共 ...
- webserver开发
https://www.cnblogs.com/zakun/p/5387910.html
- java使用Jedis远程访问CentOs7linux时出现拒绝连接的错误
使用Jedis出现Connection refused的解决方案 当我们利用Jedis操作服务器的Redis数据库时,需要先将远程服务器的端口(默认端口是6379)开放,命令如下: #/sbin/ ...
- redis的雪崩与穿透原理的浅理解
首先列一下主要说什么, 1.什么是Redis缓存的雪崩? 2.什么是Redis缓存的穿透? 3.Redis缓存崩溃会怎么样? 4.怎么预防Redis缓存崩溃? 1.什么是Redis缓存的雪崩? 举个栗 ...
- margin-top的兼容问题
产生的条件:子元素给了margin-top,并且父元素没有浮也没有其他样式,浏览器解析的结果是父元素下去了. 解决方法:1.给子元素或者父元素添加浮动,缺点:如果不需要浮动,添加浮动也页面布局会乱 2 ...
- JS精度问题(0.1+0.2 = 0.3吗?)
一.引出问题 0.1+0.2 = 0.3吗?在JS中是这样的吗?我们写个测试代码不就知道了吗? 结果出人意料,并不像我们所想象的那样.那么这到底是为什么呢? 二.原因分析 JS浮点数存储机制: 三.解 ...
- Spring Cloud 微服务笔记(七) Zuul入门
Zuul入门 Zuul是从设备和网站到后端应用程序所有请求的前门,为内部服务提供可配置的对外URL到服务的 映射关系,基于JVM的后端路由器.其具备一下功能: 1)认证与授权 2)压力控制 3)金丝雀 ...
- js计算发表的时间...分钟/小时以前/以后
网上找的都好复杂,这本来就是个粗略显示通俗的时间,绕来绕去都晕了 function timeAgo(o){ var n=new Date().getTime(); var f=n-o; var bs= ...