sqlalchemy(二)简单的连接示例
# -*- coding: utf-8 -*-
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 engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan') Base = declarative_base() # 生成orm基类 class User(Base): #进行映射,创建表结构,models ,三项,id name password
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) Base.metadata.create_all(engine) # 创建表结构
Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class() # 生成session实例
# Session.close()#关闭连接 这个放最后 # 插入开始
print('插入开始')
user_obj = User(name="jack", password="jack") # 生成你要创建的数据对象
print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
print(user_obj.name, user_obj.id) # 此时也依然还没创建 Session.commit() # 现此才统一提交,创建数据
print('提交数据')
print(user_obj.name, user_obj.id) # 提交过,就会放在数据库里了。
# 插入结束
print('插入结束') # 查询开始
print('查询开始')
my_user = Session.query(User).filter_by(name="jack").first() # 查找name=jack的
print(my_user) # 这查出来是个对象
print(my_user.id, my_user.name, my_user.password)
# 查询结束
print('查询结束') # 删除开始
print('删除开始')
# 先插入一个,可以删的。
user_obj = User(name="rose", password="jack")
Session.add(user_obj)
Session.commit()
# 查找到需要删的对象
del_user = Session.query(User).filter_by(name="rose").first()
print(del_user.name)
Session.delete(del_user) # 删除命令
Session.commit() # 提交删除
find_user = Session.query(User).all()#查询表的全部内容
for i in find_user:
print(i.id, i.name)
# 删除结束 # 修改开始
print('修改开始')
my_user = Session.query(User).filter_by(name="jack").first() # 找到第一条名字是jack的,生成对象。
my_user.name = "jackadam" # 给对象变量命名
temp_id = my_user.id # 把这个对象的ID,赋值给临时变量temp_id
Session.commit() # 提交修改
my_user2 = Session.query(User).filter_by(id=temp_id).first() # 根据临时变量id,重新查询一下名字是否修改。
print(my_user2.name)
# 修改结束
print('修改结束')
# 多条件查询
objs = Session.query(User).filter(User.id > 0).filter(User.id < 7).all()
# 多条件查询 # 统计
print('统计')
count_num = Session.query(User).filter(User.name.like("ja%")).count()
print(count_num) # 统计 # 分组
print('分组')
from sqlalchemy import func print(Session.query(func.count(User.name), User.name).group_by(User.name).all())
# 分组
Session.close()#最后不忘close '''
orady_by
desc 升序
asc 降序
'''
注释很详细了,不写了
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property() class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(120)) def __init__(self, name=None, email=None):
self.name = name
self.email = email def __repr__(self):
return '<User %r>' % (self.name) def init_db():
# 在这里导入所有的可能与定义模型有关的模块,这样他们才会合适地
# 在 metadata 中注册。否则,您将不得不在第一次执行 init_db() 时
# 先导入他们。 Base.metadata.create_all(bind=engine) if __name__ == '__main__':
init_db()
print('C,创建数据')
new_user=User(name= 'rose',email='rose@163.com')
db_session.add(new_user)
db_session.commit()
db_session.remove()
print('R,读取数据')
new_user = User(name='jack', email='jack@163.com')
db_session.add(new_user)
db_session.commit()
db_session.remove()
msg=User.query.filter_by(name='jack').first()
print(msg.email)
print('U,更新数据')
tag_user=User.query.filter_by(name='jack').first()
tag_user.email='jack@hotmail.com'
db_session.commit()
db_session.remove()
tag=User.query.filter_by(name='jack').first()
print(tag.email)
print('D,删除数据')
del_user=User.query.filter_by(name='jack').first()
db_session.delete(del_user)
db_session.commit()
db_session.remove()
另一种简单的连接示例,http://docs.pythontab.com/flask/flask0.10/patterns/sqlalchemy.html
从flask使用sqlalchemy文档中学到的。
看了几个别人的代码,也是这样写的,用映射的类名来查询,不使用session。
sqlalchemy(二)简单的连接示例的更多相关文章
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- Skinned Mesh原理解析和一个最简单的实现示例
Skinned Mesh 原理解析和一个最简单的实现示例 作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...
- Python正则表达式的简单应用和示例演示
前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- [MySQL5.6] 一个简单的optimizer_trace示例
[MySQL5.6] 一个简单的optimizer_trace示例 前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- wstngfw openVpn站点到站点连接示例(SSL/TLS)
wstngfw openVpn站点到站点连接示例(SSL/TLS) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Offi ...
- wstngfw openVpn站点到站点连接示例(共享密钥)
wstngfw openVpn站点到站点连接示例(共享密钥) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Office( ...
随机推荐
- 关于Java实现的进制转化(位运算)
一.需求: 最近在做文件传输的东西,文件传输当然是传输很重要,包括编码格式以及进制的统一. 简略的说一下这次做的东西:首先文件是按照块来发送的,一块一块大的发,但是,发送的过程是这样的: 先发送头部, ...
- AtCoder Regular Contest 102 D - All Your Paths are Different Lengths
D - All Your Paths are Different Lengths 思路: 二进制构造 首先找到最大的t,使得2^t <= l 然后我们就能构造一种方法使得正好存在 0 到 2^t ...
- Codeforces 101173 C - Convex Contour
思路: 如果所有的图形都是三角形,那么答案是2*n+1 否则轮廓肯定触到了最上面,要使轮廓线最短,那么轮廓肯定是中间一段平的 我们考虑先将轮廓线赋为2*n+2,然后删去左右两边多余的部分 如果最左边或 ...
- Codeforces 801B - Valued Keys
B. Valued Keys 题目链接:http://codeforces.com/contest/801/problem/B time limit per test 2 seconds memory ...
- redflag的echarts结构
总体的市场情况 这里我需要4个data数组. var list = { currentData:[],//这里表示当月数据量,数组长度8 totalData:[],//这里表示的累计数据量,数组长度8 ...
- lua --- Module
首先需要明白,一般情况下,我们的定义的lua模块的文件与模块名(其实就是table的名字)是一致的,当然,不一致代码也是可以编译的(亲测),之所以这样,本人认为是为了实际项目中管理的方便.以下是定义模 ...
- lua --- __newindex 的使用规则
1.如果 __newindex 是一个函数,在给 table 不存在的字段赋值的时候,会调用这个函数2.如果 __newindex 是一个table,在给 table 不存在的字段赋值的时候,会直接给 ...
- Unity---关于游戏小包的记录
最近因为需求,出了一个pc版的游戏小包,遇到一些坑,在此做一下记录. 首先需要明白的是出小包的意义所在,其实就是为了压缩包体,游戏需要的大部分资源,在第一次运行游戏的时候通过热更新去FTP资源服务器上 ...
- 到达一个数 Reach a Number
2018-09-24 14:19:58 问题描述: 问题求解: 初看到这个问题,直觉上认为可以通过BFS遍历解空间进行求解,因为本质上来说,这个问题和棋盘上移动马的问题是一类问题,都是可以转化成图的问 ...
- [转] @JoinColumn 详解 (javax.persistence.JoinColumn)
原文链接:@JoinColumn详解 原文标的也是转载,但是没有注明原文链接,看起来乱乱的,所以整理一下转载过来,顺便细看一下 1. 一对一 现假设有Person表和Address表,是一对一的关系 ...