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( ...
随机推荐
- ICO分享
- 移动采编app
大家好: 移动采编app用到了一些非该app定义的控件,比如照相机以及涉及到权限的弹窗等.这部分控件的元素id在不同品牌甚至同一品牌不同型号的手机上可能是不同的,因此安卓自动化中需要对这种情况做相应的 ...
- js获取url传递得参数
方法一:正则法 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...
- MySQL Server and Server-Startup Programs
1. mysqld-The MySQL Server mysqld,also known as mysql server, is the main program that does most of ...
- 【文献04】无人驾驶高速AWID-AWIS车辆运动控制研究
参考:阮久宏, 李贻斌, 荣学文, et al. 无人驾驶高速AWID-AWIS车辆运动控制研究[J]. 农业机械学报, 2009, 40(12):37-42. https://drive.wps.c ...
- Win10 | Mac 在server上统一办公
一个非常实际的问题,通常我们主要有三个工作的地点:1,server,用于大型数据的分析和处理:2,办公室的电脑,正式办公:3.自己的电脑,偶尔加班. 不同的工作平台之间很难同步,导致我们的工作和思维分 ...
- c++-pimer-plus-6th-chapter02
<C++ primer plus 英文版 第六版>娓娓道来.这个是上下分册.而且,出版时间是最新的2015年,买回来发现网上的勘误基本都被纠正过来了,极个别错误没有影响到理解,好哎!而且发 ...
- 无线网络覆盖-java中,用Math.sqrt()时,必须要注意小数问题
时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们的乐乐同学对于网络可算得上是情有独钟,他有一个计划,那就是用无线网覆盖郑州大学. 现在学校给了他一个机会,因此他要购买 ...
- string用scanf读入printf输出(节省时间)
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; in ...
- Vue之vue自动化工具快速搭建单页项目目录
1 生成项目目录 使用vue自动化工具可以快速搭建单页应用项目目录. 该工具为现代化的前端开发工作流提供了开箱即用的构建配置.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构 ...