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 二 ...
随机推荐
- SQL Server 创建索引
索引的简介: 索引分为聚集索引和非聚集索引,数据库中的索引类似于一本书的目录,在一本书中通过目录可以快速找到你想要的信息,而不需要读完全书. 索引主要目的是提高了SQL Server系统的性能,加快数 ...
- mybatis 中使用 in 查询
转:http://www.cnblogs.com/xusir/archive/2013/07/24/3210286.html 当查询的参数只有一个时 a 如果参数的类型是List, 则在使用时,col ...
- hbase读的性能优化
任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...
- 咸鱼入门到放弃10--javaweb的两种开发模式
(本篇是之前方法的综合使用,新东西不多,其中也涉及三层架构的问题.此处直接引用了大佬blog:https://www.cnblogs.com/xdp-gacl/p/3908610.html) SUN公 ...
- 回文自动机(PAM) 学习笔记
原文链接www.cnblogs.com/zhouzhendong/p/PAM.html 前置知识 无. (强行说和KMP有关也是可以的……) 关于回文串的一些性质 1. 一个长度为 n 的字符串最多有 ...
- Vue项目预渲染机制引入实践
周末想顺便把已经做好静态页面的webApp项目做一下SEO优化,由于不想写蹩脚的SSR代码,所以准备采用预渲染,本来想着网上有这么多预渲染的文章,随便找个来跟着做不就完了嘛,结果年轻的我付出了整个周末 ...
- python:PATH、PYTHONPATH 和 sys.path 的区别
python:PATH.PYTHONPATH 和 sys.path 的区别 共同点 所有在它们的路径里面的 moduel 都可以被 import PATH 在 PATH 中的一些命令,例如 *.exe ...
- ImCash:韩国最大交易所遭遇至暗时刻:2018年亏损1.8亿美元
Bithumb上个月遭到黑客攻击,随后要求用户小心存款,该公司报告称损失1.8亿美元(合2050亿韩元). 据<韩国时报>(Korea Times)报道:受到熊市影响,数字货币交易所实际交 ...
- mysql注释方法【自用】
原文链接:https://www.jb51.net/article/125991.htm 一.MySQL支持三种注释方式: 1.从‘#'字符从行尾. 2.从‘-- '序列到行尾.请注意‘-- '(双破 ...
- Typescript骚操作,在TS里面直接插入HTML
Typescript骚操作,在TS里面直接插入HTML,还有语法提示 先给大家看一个图 因为我不喜欢用很重的框架,主要是并非专业UI,但是偶尔会用到,还是觉得直接element组装受不了,想想能在ts ...