python的sqlalchemy框架
先看一下sqlalchemy框架中的映射,sqlalchemy一共有三种映射方式:传统映射(classic)、
现代化映射(modern)、自定义映射。
在这里,只为大家讲一下classic映射和modern映射。
classic映射:
顾名思义,就是类似于hibernate那样,要写好多配置文件,这里放一个小例子:
#coding=utf-8
from sqlalchemy import Table, MetaData, Column, Integer, String, DateTime
from datetime import datetime
from sqlalchemy.engine import create_engine
'''''与数据库建立链接'''
engine = create_engine("mysql://username:password@databasehost/databasename",isolation_level="READ UNCOMMITTED")
'''''数据库表与对象之间的映射关系,类于hibernate中的xml配置文件'''
metadata = MetaData()
people = Table( #people
'people', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(16), unique=True, nullable=False),
Column('gender', String(255), unique=True, nullable=True),
Column('created', DateTime, default=datetime.now)
)
student = Table( #student
'student', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(16), unique=True, nullable=False),
Column('gender', String(255), unique=True, nullable=True),
Column('created', DateTime, default=datetime.now)
)
teacher = Table( #teacher
'teacher', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(16), unique=True, nullable=False),
Column('gender', String(255), unique=True, nullable=True),
Column('created', DateTime, default=datetime.now)
)
'''''创建数据库的类'''
class People(object):pass
class Student(object):pass
class Teacher(object):pass
'''''传统映射方式'''
mapper(People,people)
mapper(Student,student)
mapper(Teacher,teacher)
'''''创建表'''
metadata.create_all(engine)
此时,如果我们再写一个*.py文件
代码如下:
from dbproject.dbsetting import People,Teacher,engine
from sqlalchemy.orm import sessionmaker
people = People()
teahcer = Teacher()
people.name='renlei'
people.id=1
teahcer.name='laoshi'
teahcer.id=1
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
session.add(people)
session.add(teahcer)
session.flush()
session.commit()
编译运行这个python文件,就会发现数据库中的信息发生了相应变化。
modern映射:
如下,先写一个modern.py文件,代码:
#coding=utf-8
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.engine import create_engine
'''与数据库建立链接'''
engine = create_engine("mysql://username:password@databasehost/databasename",isolation_level="READ UNCOMMITTED")
'''数据库表结构'''
Base = declarative_base()
class People():#定义一个基类当然也可以不定义,这里只是给个例子
id = Column(Integer, primary_key=True)
name = Column(String(16))
gender = Column(String(16))
age = Column(String(16))
class User(Base,People):
__tablename__ = 'users'
fullname = Column(String(16))
password = Column(String(16))
class AdvancedUser(Base,People):
__tablename__ = 'advanceduser'
fullname = Column(String(16))
password = Column(String(16))
email = Column(String(16))
class Teacher(Base,People):
__tablename__ = 'teacher'
phone = Column(String(16))
#创建所有的表
Base.metadata.create_all(engine)
接入来再写一个control.py文件,代码:
#coding=utf-8
from sqlalchemy.orm.session import sessionmaker
from modern import engine,User,AdvancedUser,Teacher
user = User()
user.name = 'username'
user.gender = 'male'
au = AdvancedUser()
au.name = 'auname'
au.gender = 'female'
teacher = Teacher()
teacher.name = 'wangdi'
teacher.gender = 'female'
teacher.phone = '15264397652'
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
session.add(user)
session.add(au)
session.add(teacher)
session.flush()
session.commit()
编译执行代码,会发现数据库内信息有变化,怎么样,与classic映射相比,这种写法是不是更方便啊。
这样,我们就可以省去大量的sql语句,直接使用python代码来完成。
转载于:https://blog.51cto.com/41175/1882185
python的sqlalchemy框架的更多相关文章
- python之SQLAlchemy ORM 上
前言: SQLAlchmey是暑假学的,当时学完后也没及时写博客整理下.这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.下篇博客整理写篇关于Web框架和django基础~ ...
- 【Python】 SQLAlchemy的初步使用
SQLAlchemy 在很多Python的web框架中都整合进了SQLAlchemy这个主要发挥ORM作用的模块.所谓ORM,就是把复杂的SQL语句给包装成更加面向对象,易于理解的样子.在操作数据库的 ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- python之SQLAlchemy ORM
前言: 这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.有兴趣可看下python之数据库(mysql)操作.下篇博客整理写篇关于Web框架和django基础~~ 一.OR ...
- Python 并行分布式框架 Celery
Celery 简介 除了redis,还可以使用另外一个神器---Celery.Celery是一个异步任务的调度工具. Celery 是 Distributed Task Queue,分布式任务队列,分 ...
- SQLAlchemy框架
Python 的 ORM 框架 SQLAlchemy 有些同学已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好用 我在这里官宣辟谣一下啊, Mode ...
- 【转】Python 并行分布式框架 Celery
原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...
- 关于python的bottle框架跨域请求报错问题的处理
在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...
随机推荐
- flask-migrate的基本使用
Flask-migrate 在实际开发环境中,经常会发生数据库修改的行为.一般我们修改数据库不会手动的去修改,而是去修改orm对应的模型, 然后再把模型映射到数据库中.这时候如果有一个工具能专门做这种 ...
- ESLint如何配置
1.简介 通过用 ESLint 来检查一些规则,我们可以: 统一代码风格规则,如:代码缩进用几个空格:是否用驼峰命名法来命名变量和函数名等. 减少错误, 如:相等比较必须用 === ,变量在使用前必须 ...
- 2016蓝桥杯报纸页数(C++C组)
题目: 报纸页数X星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已.每张纸印有4版.比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸.我们在太空中 ...
- LINUX解压缩 zip文件
压缩当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip xxx.zip
- Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)
一.注释Python中单行注释以 # 开头,实例如下: # 第一个注释 print ("Hello, Python!") # 第二个注释 输出结果为: ============== ...
- pyecharts的使用及总结
包的下载及配置 这个包的相应的配置较多,版本也不兼容,总结一下 预览:pyecharts画图 pip pyecharts pip 各级别地图(6.7个左右) pip jupyter环境 [为了生成pn ...
- YII基础
一.目录结构 应用中最重要的目录和文件(假设应用根目录是 basic): basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含应用配置及 ...
- vue中axios的安装使用
axios是一个基于 promise 的 HTTP 库,在vue中axios是比较常用的网络请求方法. 安装 npm install axios -S 在main.js配置 import axios ...
- 01-启动jmeter目录功能
1.bin :存储了jmeter的可执行程序,如启动脚本.配置程序 docs: api扩展文档存放 lib: lib\ext 存储了jmeter的整合的功能(如.jar文件程序,和第三方 ...
- OO第三单元作业分析
一.JML的理论基础应用工具链 JML是用于对Java程序进行规格化设计的一种表示语言.基于Larch方法构建. (1)注释 JML以javadoc注释的方式来表示规格,每行都以@起头.有两种注释方式 ...