Python连接数据库 ORM——插入,查询, 修改,删除

导读:本篇文章讲解 Python连接数据库 ORM——插入,查询, 修改,删除,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

初学ORM 工具之 SQLAlchemy 操作MySQL,结果混淆了sessionmaker和它的实例。
sessionmaker需要先绑定engine,然后实例化一个session,这个session才可以用于CURD。

使用orm插入数据

# SQLAlchemy如何创建表并增加一条记录 第一步先导入模块
from sqlalchemy import create_engine   # sqlalchemy的引擎
from sqlalchemy import Column,String,Integer # 字段类,字符串类和整形
from sqlalchemy.orm import sessionmaker # 预配置范围的会话(session),代替connect执行数据库操作
from sqlalchemy.ext.declarative import declarative_base   # 用于创建数据库中表的基类

#第二步构造基类
Base=declarative_base() #构造基类

#第三步构造一个表
class math(Base):#必须继承declaraive_base得到的基类
    __tablename__ = "math"  #用__tablename__来指定这个类对应什么表,如果这个表在库中不存在,SQLAlchemy会帮我们创建
    id=Column(String(20),primary_key=True) #Column类创建一个字段
    name=Column(String(50))
    ms=Column(Integer)
#第四步建立与数据库的连接 
if __name__=='__main__':
    engine=create_engine('mysql+mysqlconnector://root:65578466578@127.0.0.1:3306/score') #建立数据库连接
    DBSession=sessionmaker(bind=engine) # 实例化 sessionmaker,绑定engine
    
    Session=DBSession() #实例化了一个会话(或叫事务),之后的所有操作都是基于这个对象的

#第五步创建数据并加入其中
    liuzhishan = math(id='001',name="lzs",ms=100)
    zhangsan = math(id='002',name="张三",ms=90)

    Session.add(liuzhishan) # 增加一条记录
    Session.add(zhangsan) # 增加一条记录
#第六步提交数据和关闭数据库
    Session.commit()  # 一定记得提交
    Session.close

也可以多条数据直接插入

在插入数据过后,反复的插入相同的数据必然会报错,可以加上try语句

#多条语句的插入:是列表形式  add_all()方法 []括起来
#User为表格的类名,使用类名进行插入,后面的id、name、ms、为字段名,插入数据只需要直接赋值就好了。
try:
	Session.add.all([
	User(id='001',name='lzs',ms=100),
	user(id='002',name="张三",ms=90)
	])
	Session.commit()
except:
	print("已经提交过了,不必反复提交")
	Session.rollback()

使用orm查询数据

  1. 查询数据
from sqlalchemy import Column,String,Integer,create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

base=declarative_base()

class math(base):
    __tablename__="math"

    id=Column(String(20),primary_key=True)
    name=Column(String(20))
    ms=Column(Integer)

engine=create_engine("mysql+mysqlconnector://root:453567463@localhost:3306/score")
Session = sessionmaker(bind=engine)  #构造连接Python与mysql
session = Session()

x = session.query(math.id,math.name,math.ms).all() #query意思是查询,all代表所有的数据,frist代表第一条
#all()代表所有数据,返回的是个列表[],frist()代表第一条数据,返回的是个元祖()
print(x)
for i in x:
    print(i)
session.close()

输出结果:

[('001', 'lzs', 100), ('002', '张三', 90)]
('001', 'lzs', 100)
('002', '张三', 90)

最后也可以这样写:

x = session.query(User).all() #query意思是查询,User为表格的类名,all()代表所有的数据,frist()代表第一条
#all()代表所有数据,返回的是个列表[],frist()代表第一条数据,返回的是个元祖()
#print(x) 此时x是个表格math
for i in x:
    print(i.name,i.id) #name id为表格中的字段名
session.close()

输出结果:

001 lzs
002 张三
  1. 查询单条数据:

使用 .get()方法 、使用主键查询 只支持主键查询 这里的 1 是指表中主键的一个值:
查不到数据时,返回None,加上判断查不到时,会报错。

x=session.query(User).get(1)
if x:
	print(x.name)
else:
	print("暂无数据")
	
  1. 条件查询:
x=session.query(User).filter_by(name="张三")
print(x)
for i in x:
	print(i)

修改数据:

修改数据: 注意使用 .get() 方法只能去找主键
首先使用 .get()获取到数据,然后直接使用 . 加字段名的方法修改

x=session.query(User).get(2)
print(x.name)
x.name="李四"
session.commit
session.close

删除数据

删除数据 首先要拿到数据,然后使用session.delete(数据)删除

x=session.query(User).get(2)

session.delete(x) #删除主键编号为2的一条数据
y=session.query(User).all()
#查看所有的字段:是否已经删除
for i in y:
	print(i.name)
session.commit()
session.close()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/61410.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!