Python SQLAlchemy 简单的CRUD
大家好,我是练习时长两年半的大数据练习生,喜欢数学,AI,大数据。
写博客是为了总结,分享,自娱自乐
。希望写出的东西会对自己,对别人都有价值!
废话不多说,现在是个终身学习的时代,开始学习了!奥力给!干了兄弟们!
是时候展现真正的技术了:👇👇👇😋😋😋
文章目录
准备工作
上次写了SQLAlchemy用ORM描述表关系,今天就总结一下Alchemy的CRUD操作。
CRUD是指增加(Create)
、查询(Retrieve)
、更新(Update)
和删除(Delete)
今天了解到MySQLdb
一般是py2.x版本使用的老东西了,现在人们都用pymysql
了。
还有用Faker
生成增删改查的假数据,Faker
就是一个用来产生假数据的包。
首先把这俩包安装一下
会话Session
SQLAlchemy通过Session机制来操作MySQL数据库,所以你得先用engine创建一个Session对象。
因为engine知道数据库在哪,Session就得依靠engine的数据库地址信息来开启会话。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:root@localhost:3306/exam')
Session = sessionmaker(bind=engine)
session = Session()
要想理解下面的内容,你可能需要这些前置知识:
- Python 列表生成式
增加(Create)
"""
Create 操作
"""
from faker import Factory
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
faker = Factory.create()
engine = create_engine('mysql+pymysql://root:root@localhost:3306/exam')
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
class User(Base):
__tablename__ = "User"
id = Column(Integer, primary_key=True,autoincrement=True)
cname = Column(String(64))
caddress = Column(String(512))
def __init__(self,name,address):
self.cname = name
self.caddress = address
def __str__(self):
return "cname:"+self.cname +" caddress:"+self.caddress
def __repr__(self):
return "cname:"+self.cname +" caddress:"+self.caddress
class Dog(Base):
__tablename__ = "Dog"
id = Column(Integer,primary_key=True,autoincrement=True)
dname = Column(String(64))
ddesc = Column(String(1024))
def __init__(self,name,desc):
self.dname = name
self.ddesc = desc
def __str__(self):
return "dname:"+self.dname + " ddesc:"+self.ddesc
# 生成多条Users数据
Users = [User(name= faker.name(),address = faker.address()) for i in range(10)]
# 生成一条Dog数据
dog = Dog(name=faker.name(),desc=faker.email())
# 把描述的表创建出来
Base.metadata.create_all(engine)
# 把多个表数据添加到会话
session.add_all(Users)
# 把一个表数据添加到会话
session.add(dog)
# 提交会话
session.commit()
重点记忆:
- 把多个表数据添加到会话
session.add_all()
- 把一个表数据添加到会话
session.add()
- 提交会话
session.commit()
查询(Retrieve)
"""
Retrieve查询操作
"""
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:root@localhost:3306/exam')
# 实例它一个sessionmaker类
Session = sessionmaker(bind=engine)
# 数据库会话
session = Session()
# 基类
Base = declarative_base()
# ORM描述User表
class User(Base):
__tablename__ = "User"
id = Column(Integer, primary_key=True,autoincrement=True)
cname = Column(String(64))
caddress = Column(String(512))
def __init__(self,name,address):
self.cname = name
self.caddress = address
def __str__(self):
return "cname:"+self.cname +"\ncaddress:"+self.caddress
def __repr__(self):
return "cname:"+self.cname +"\ncaddress:"+self.caddress
# 查询会返回所有的结果
users = session.query(User).all()
# 遍历输出看所有结果
for user in users:
print(user.__str__() +"\n--------------------------\n")
# 条件查询(我数据库里只有一个ElizabethBass),这里也是为了方便展示.first()获取第一个对象的作用
elizabeth = session.query(User).filter_by(cname='Elizabeth Bass').first()
print(elizabeth)
print("\n------------------------\n")
# 条件查询的另一种形式
elizabeth = session.query(User).filter(User.cname == 'Elizabeth Bass').first()
print(elizabeth)
更新(Update)
更新就是把它拿出来改一下再放回去。
"""
Update更新操作
"""
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:root@localhost:3306/exam')
# 实例它一个sessionmaker类
Session = sessionmaker(bind=engine)
# 数据库会话
session = Session()
# 基类
Base = declarative_base()
# ORM描述Dog表
class Dog(Base):
__tablename__ = "Dog"
id = Column(Integer,primary_key=True,autoincrement=True)
dname = Column(String(64))
ddesc = Column(String(1024))
def __init__(self,name,desc):
self.dname = name
self.ddesc = desc
def __str__(self):
return "dname:"+self.dname + " ddesc:"+self.ddesc
# 还记得吗,我们的数据库里只有一条Dog的数据
# 现在就把它拿出来,改一下名字,再放回去
dog = session.query(Dog).first()
print(dog)
print("\n---------------------\n")
# 给小狗改名
dog.dname = "little white"
# 提交更改
session.commit()
# 改完再看看
dog = session.query(Dog).first()
print(dog)
删除(Delete)
删除更简单,一个delete方法下去,再提交一下,就没了。
"""
删除Delete操作
"""
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:root@localhost:3306/exam')
# 实例它一个sessionmaker类
Session = sessionmaker(bind=engine)
# 数据库会话
session = Session()
# 基类
Base = declarative_base()
# ORM描述Dog表
class Dog(Base):
__tablename__ = "Dog"
id = Column(Integer,primary_key=True,autoincrement=True)
dname = Column(String(64))
ddesc = Column(String(1024))
def __init__(self,name,desc):
self.dname = name
self.ddesc = desc
def __str__(self):
return "dname:"+self.dname + " ddesc:"+self.ddesc
# 把唯一的一条狗数据删掉
dog = session.query(Dog).first()
session.delete(dog)
session.commit()
# 删了之后一条数据都没了 = =
dogs = session.query(Dog).all()
for dog in dogs:
print(dog)
print("\n------------------\n")
总结
经过几天的学习,终于了解到所谓的用SQLAlchemy改写SQL
,就是用类把数据库描述出来,然后进行类的各种操作,从而代替原始SQL。
而且我也了解到原始SQL的重要性
,只要原始SQL用的够6,不管是什么ORM,什么SQL框架,都离不开原始SQL。如果原始SQL掌握的不好,那就GG了。
最后,百度又学到了更规范的创建Engine的写法:
"""
创建Engine还有更规范的写法
"""
from sqlalchemy import create_engine
# 数据库ip
HOSTNAME = '127.0.0.1'
# 端口号
PORT = '3306'
# 数据库名称
DATABASE = 'exam'
# 用户名
USERNAME = 'root'
# 密码
PASSWORD = 'root'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
# 创建数据库引擎
engine = create_engine(DB_URI)
😆小伙伴们!相信看到这里的你一定有所收获!
😂如果我哪里写错欢迎评论区来喷😂😂😂
😘如果觉得对你有帮助请给个赞哦亲
!🤞🤞🤞🤞🤞🤞
🤞🤞🤞最后引用名言一句
:我们无论遇到什么困难,都不要怕,微笑着面对它!消除恐惧的最好办法就是面对恐惧!加油!奥力给!