sqlalchemy数据库分层操作
在学习sqlalchemy操作中,最常见的就是如下的示例,一个文件基本上包含了数据库的增删改查。sqlalchemy的具体操作我就不再详细说明了。流程大概是:
- 定义表
- 创建数据库引擎
- 创建表
- 插入数据
- 查询数据
#coding:utf-8 from sqlalchemy import Column,String,create_engine,MetaData
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import INTEGER,CHAR Base = declarative_base() meta = MetaData() #定义User对象
class User(Base):
__tablename__ = 'user_one' id = Column(String(20),primary_key=True)
name = Column(String(20)) #初始数据库连接
engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test') #创建DBsession
DBSession = sessionmaker(bind=engine) #创建session会话,数据库操作的基石。
session = DBSession() #在数据库中创建表user
User.metadata.create_all(bind=engine) #插入数据
new_user = User(id='',name='kiit') #提交数据到session
session.add(new_user) #提交到数据库
session.commit() #查询User表
user_data = session.query(User).all() #关闭session连接
session.close() #循环将返回的数据打印
for i in user_data:
print i.id,i.name
而在实际的生产环境中根本不可能使用一个文件完成数据的这么多的操作。数据库的操作大体分为:增、删、改、查 。那么就分为这四个部分去完成数据的操作
1、定义数据库
models.py
#coding:utf-8 from sqlalchemy import Column,CHAR,INTEGER
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base):
__tablename__ = "user" id = Column(CHAR(20),primary_key = True)
name = Column(CHAR(20)) class Solary(Base):
__tablename__ = "solary" id = Column(INTEGER,primary_key = True)
name = Column(CHAR(20))
num = Column(CHAR(20))
2、创建数据库
sql_create.py
#coding:utf-8 from sqlalchemy import create_engine
from models import * engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test') def create_table(table_name):
table_name.metadata.create_all(engine)
print "创建成功"
3、插入数据
sql_insert.py
#coding:utf-8 from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.mysql import INTEGER,CHAR
from sqlalchemy import create_engine,Column def insert(new_data): Base = declarative_base()
engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test')
print "创建数据库引擎" DBSession = sessionmaker(bind=engine)
session = DBSession()
print "创建session对象" session.add(new_data)
print "添加数据到session" session.commit()
print "提交数据到数据库" session.close()
print "关闭数据库连接" if __name__ == "__main__":
insert(User)
4、查询数据
sql_select.py
#coding:utf-8 from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from models import * def select_fun(table_name):
engine = create_engine("mysql+mysqldb://root:123@localhost:3306/test")
print "初始化数据库引擎" DBSession = sessionmaker(bind=engine)
session = DBSession()
print "创建session对象" table_data = session.query(table_name).all()
print "查询" session.close() return table_data if __name__ == "__main__":
select_fun(User)
5、使用增,删,改函数
test.py
#coding:utf-8 from models import *
from sql_create import *
from sql_select import * create_table(Solary) new_user = User(id="8",name="miko") insert(new_user)
print "产生新的用户" data = select(User) for i in data:
print i.id,i.name
函数化操作的好处就是避免重复代码,并且能够解开耦合。想要查询数据库时不需要先定义table,想要删除数据库时不需要再创建引擎。以上代码经过多次测试,亲测可用。
sqlalchemy数据库分层操作的更多相关文章
- Flask学习笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy
Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- mysql数据库----python操作mysql ------pymysql和SQLAchemy
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...
- Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate
数据库迁移是将代码中模型类(即表)的修改同步到数据库中, flask-sqlalchemy的模型类一旦使用create_all()映射到数据库中后,对这个模型类的修改(例如添加了一个新的字段)就不会再 ...
- python框架之Flask基础篇(二)-------- 数据库的操作
1.flask连接数据库的四步: 倒入第三方数据库扩展包:from flask_sqlalchemy import SQLAlchemy 配置config属性,连接数据库: app.config[&q ...
- SQLAlchemy多表操作
目录 SQLAlchemy多表操作 一对多 数据准备 具体操作 多对多 数据准备 操作 其它 SQLAlchemy多表操作 一对多 数据准备 models.py from sqlalchemy.ext ...
- php模拟数据库常用操作效果
test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...
- Android-Sqlite数据库的操作
Sqlite数据库的简单操作: 设置增删改查的按钮,xml界面布局设置 <?xml version="1.0" encoding="utf-8"?> ...
- (四)SQL入门 数据库的操作与事务管理
数据库的操作,有三个最基本的语句,insert插入,update修改,delete删除. 不同的数据库厂商的实现可能不同,所以就不说具体的语法怎么写的了.说语法也没有意义,到处都可以复制粘贴,记得听某 ...
随机推荐
- Android 2019最新面试实战总结
Android: 今日头条屏幕适配的原理? 1:首先计算出 density,计算公式:当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = densitydensity 的意思就是 1 ...
- css颜色表示法
css颜色值主要有三种表示方法: 1.颜色名表示,比如:red 红色,gold 金色 2.rgb表示,比如:rgb(255,0,0)表示红色 3.16进制数值表示,比如:#ff0000 表示红色,这种 ...
- CSS圆角进化论
CSS圆角发展过程 大致经历了3个阶段,包括: 背景图片实现圆角 CSS2.0+标签模拟圆角 CSS3.0圆角属性(border-radius属性)实现圆角 ☛背景图片实现圆角:==使用背景图片实现 ...
- BZOJ3566: [SHOI2014]概率充电器 树形+概率dp
3566: [SHOI2014]概率充电器 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1888 Solved: 857[Submit][Stat ...
- iptables防火墙详解(二)
-- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有11种之多(课后可以自己去读一下相关知识) 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及I ...
- 构造器引用和直接用new创建对象区别
万事用事实说话 package cn.lonecloud; /** * @author lonecloud * @version v1.0 * @date 上午11:22 2018/4/30 */ p ...
- 分考场(无向图着色问题)(dfs回溯)
问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输入格式 第一行,一个整数n(1<n<100),表示参加考试的人 ...
- apache ArrayUtils 工具类
org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...
- matplotlib 将两张数据视图在一起显示
import numpy as np import pandas as pd from matplotlib import pyplot as plt if __name__ == "__m ...
- Java 多线程篇
先举个例子 计算机的核心是CPU,它承担了计算机所有计算任务,可以把它理解为像一个工厂,时刻在运行. 假定工厂有一个电力系统,工厂有很多车间,一次只能供给一个车间使用,也就是说一个车间开工的时候,其他 ...