开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
learning-code
/
Python
/
SQLAlchemy
/
03-sessionmark.py
learning-code
/
Python
/
SQLAlchemy
/
03-sessionmark.py
03-sessionmark.py 4.93 KB
一键复制 编辑 原始数据 按行查看 历史
NoName 提交于 2021年12月13日 18:48 +08:00 . update
import datetime
import sqlalchemy
from sqlalchemy import create_engine
from urllib.parse import quote
from sqlalchemy.orm import declarative_base, Session
from sqlalchemy import Column, DateTime, String, insert, Integer, update, delete, select
import time
"""
create database learn_db;
use learn_db;
create table staff
(
id int auto_increment
primary key,
create_time datetime null,
name varchar(255) not null,
address varchar(255) not null
);
"""
print(sqlalchemy.__version__)
"""
https://docs.sqlalchemy.org/en/14/tutorial/engine.html
future=True代表使用2.0风格的连接 在2.0
`with engine.connect() as conn` 代码将不会自动commit, 并且会在代码块中执行ROLLBACK
`with Session(engine) as session` 在2.0同样不会自动提交 并且会在代码块中执行ROLLBACK(如果没有commit)
"""
engine = create_engine(f'mysql://root:{quote("kexin@kexin2021")}@192.168.1.80/learn_db', echo=True, future=True,
pool_size=3)
engine.connect()
Base = declarative_base(engine)
# time.sleep(100)
# see https://docs.sqlalchemy.org/en/14/tutorial/metadata.html#declaring-mapped-classes
class Staff(Base):
__tablename__ = 'staff2'
id = Column(Integer, primary_key=True)
create_time = Column(DateTime)
name = Column(String(255))
address = Column(String(255))
def __str__(self):
return f'[id: {self.id}, name: {self.name}, address: {self.address}]'
Base.metadata.drop_all()
Base.metadata.create_all()
def a():
# create
with Session(engine) as session:
obj: Staff = Staff()
obj.address = '北京2'
obj.name = 'tom'
obj.create_time = datetime.datetime.now()
session.add(obj)
session.commit()
# session.flush() https://docs.sqlalchemy.org/en/14/tutorial/orm_data_manipulation.html#flushing 没有必要flush
a()
def b():
# read
# https://docs.sqlalchemy.org/en/14/tutorial/data_select.html#the-select-sql-expression-construct
with Session(engine) as session:
from sqlalchemy.engine.row import Row
from sqlalchemy.engine.result import ChunkedIteratorResult
stmt = select(Staff).where(Staff.name == 'tom')
for i in session.execute(stmt): # i 是Row类型
print('obj111111111-->', i, type(i), i[0].name)
res = session.execute(stmt).first() # first 即使数据不存在也不会异常
print('obj22222222222222222-->', res, type(res), res[0]) # res[0]是Staff 如果没有数据那么是None异常
stmt = select(Staff).where(Staff.name == 'tom2')
res2 = session.execute(stmt)
print('resssss->', type(res2))
try:
print('obj3-->', res2.scalar_one_or_none()) # scalar_one数据不存在会异常, scalar_one_or_none()则不会异常
except Exception as e:
print(e, type(e))
b()
def c():
# update
with Session(engine) as session:
# https://docs.sqlalchemy.org/en/14/tutorial/orm_data_manipulation.html#updating-orm-objects
session.execute(update(Staff).where(Staff.name == 'tom').values(name='tom_update'))
session.commit()
stmt = select(Staff).where(Staff.name == 'tom_update')
res = session.execute(stmt)
obj: Staff = res.scalar_one_or_none()
if obj:
obj.name = 'tom_update2'
session.add(obj)
session.commit()
c()
# delete
with Session(engine) as session:
# https://docs.sqlalchemy.org/en/14/tutorial/orm_data_manipulation.html#deleting-orm-objects
# stmt = select(Staff).where(Staff.name == 'tom_update2')
# res: ChunkedIteratorResult = session.execute(stmt)
# obj: Staff = res.scalar_one_or_none()
# session.delete(obj)
# session.commit()
from sqlalchemy.engine.cursor import CursorResult
stmt2 = delete(Staff).where(Staff.name == 'tom_update2')
res11: CursorResult = session.execute(stmt2)
print(res11, type(res11), '影响的行数:',
res11.rowcount) # https://docs.sqlalchemy.org/en/14/tutorial/data_update.html#getting-affected-row-count-from-update-delete
session.commit()
# create
with Session(engine) as session:
obj: Staff = Staff()
obj.address = '北京2'
obj.name = 'tom'
obj.create_time = datetime.datetime.now()
session.add(obj)
session.commit()
# 长事物
session = Session(engine)
# try:
# session.execute(update(Staff).where(Staff.name == 'tom').values(name='tom_update_long_trans', create_time='sdsd'))
# except Exception as e:
# print('出现异常没有调用commit或者collback')
# else:
# session.commit()
with session:
try:
session.execute(
update(Staff).where(Staff.name == 'tom').values(name='tom_update_long_trans', create_time='sdsd'))
except Exception as e:
print('出现异常没有调用commit或者collback')
else:
session.commit()
time.sleep(100)
# select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>10
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/baloneo/learning-code.git
git@gitee.com:baloneo/learning-code.git
baloneo
learning-code
learning-code
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /