Python的SQLalchemy模块连接与操作MySQL的基础示例


Posted in Python onJuly 11, 2016

一、SQLalchemy简介
SQLAlchemy是一个开源的SQL工具包,基本Python编程语言的MIT许可证而发布的对象关系映射器。SQLAlchemy提供了“一个熟知的企业级全套持久性模式,使用ORM等独立SQLAlchemy的一个优势在于其允许开发人员首先考虑数据模型,并能决定稍后可视化数据的方式。
二、SQLAlchempy的安装
首先需安装mysql,这里就不再多说了.....
然后,下载SQLAlchemy(http://www.sqlalchemy.org/download.html),这里我们以Windows系统为例,然后打开cmd,在安装包文件目录下,运行

python setup.py install

,通过python下输入

import sqlalchemy

,执行未报错则表示安装成功
 
三、SQLAlchemy的使用实例

1、完成简单数据表信息查询

# 1. 导入模块
from sqlalchemy import *
from sqlclchemy.orm import *
# 2. 建立数据库引擎
mysql_engine = create_engine("$address", echo, module)
 #address 数据库://用户名:密码(没有密码则为空)@主机名:端口/数据库名
 #echo标识用于设置通过python标准日志模块完成的SQLAlchemy日志系统,当开启日志功能,我们将能看到所有的SQL生成代码
# 3. 建立连接
connection = mysql_engine.connect()
# 4. 查询表信息
result = connection.execute("select name from t_name)
for row in result:
 print "name: ", row['name']
# 5. 关闭连接
connection.close()

 
2、插入新的数据表

# 1. 导入模块
from sqlalchemy import *
from sqlclchemy.orm import *
# 2. 建立数据库引擎
mysql_engine = create_engine("$address", echo, module)
 #address 数据库://用户名:密码(没有密码则为空)@主机名:端口/数据库名
 #echo标识用于设置通过python标准日志模块完成的SQLAlchemy日志系统,当开启日志功能,我们将能看到所有的SQL生成代码
# 3. 设置metadata并将其绑定到数据库引擎
metadata = Metadata(mysql_engine)
# 4. 定义需新建的表
users = Table('users', metadata,Column('user_id', Integer, primary_key=True),
 Column('name', String(40)),
 Column('age', Integer),
 Column('password', String),)
 #Table实现方式与SQL语言中的CRETE TABLE类似
# 5. 在数据库中创建表
metadata.create_all(mysql_engine)
 #向数据库发出CREATE TABLE命令,由此数据库新建名为users的表
 #调用时会检查已经存在的表结构,因此可重复调用
# 6. 创建一个与数据库中的users表匹配的python类
class user():
 def __int__(self, name, fullname, password):
 self.name = name
 self.fullname = fullname
 self.passwd = passwd
 #python类的属性需与users表的列名一致
# 7. 设置映射
from sqlalchemy.orm import mapper
mapper(user, users)
 # mapper()创建一个新的Mapper对象,与定义的类相关联
#需要注意的是,通过mapper建立映射的数据表必须带有主键,如果没有主键就无法定位某个table的某行row, 
#如果无法定位某行row, 就无法做Object-relational mapping这样的映射
# 8. 创建session
Session = sessionmaker(bind=mysql_egnine)
session = Session()
 #由此我们只需对python的user类的操作,后台数据库的具体实现交由session完成
# 9. 执行
session.commit()
 #实现与数据库的交互
# 10. 查询
usr_info = session.query(user).filter_by(age=12).first()
 #返回数据库中年纪12岁的第一条数据

上面结合SQLAlchemy中ORM部分实现一个Mapper对象,将类的实例对应表中的记录,实例的属性对应字段。实现一个Data Mapping需要三个元素:Tabella Metadata, user-defined class, mapper对象,这三个是实现对象对表映射的基本元素,在此基础上,可实现一对多的映射,实现类似多表查询的问题
首先创建两个相关联的表Student, Score,表Score中以主表的id字段为外键

Student = Table('student', engine,  
              column(‘id', Interger, primary_key = True), 
              column('name', String, nullable=False), 
              column('age', Interger) 
) 
Score = Table('score', engine,  
            column('id', Integer, primary_key=True), 
            column('student_id', Integer, ForeignKey(student.id)) 
            column('category', String, nullable=False), 
            column('score', Integer)   
)

两表中,Score表以Student表中id项为外键,一般称Student表为主表,Score表为从表
表创建好后,那同样,在python中需定义两个与表相对应的类

class student_type(object): 
     def __init__(self): 
        self.name = None 
class score_type(object): 
     def __init__(self): 
        self.category = None

在建立mapping时,我们只需要体现两个表间又相互关联关系,
并不关心表中具体的主键与外键等关系(由SQLAlchemy处理),
当需要体现表student与表score间的关联关系,mapper具体的定义方法如:
mapper(student_type, student, properties={'_scores': relation(score_type, Score)})
通过properties中参数,实现score_type 与Score的映射,
由此可以通过访问student中的'_scores'属性来查询Score表中的值
另外,properties是一个字典,可以添加多个属性,SQLAlchemy中有些模块如backref, 也可导入

综上,使用关系映射可以方便地从一个对象直接找到相对应的其他的对象

Python 相关文章推荐
Python 自动安装 Rising 杀毒软件
Apr 24 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python开发简易版在线音乐播放器
Mar 03 Python
python实现朴素贝叶斯分类器
Mar 28 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
python批量解压zip文件的方法
Aug 20 Python
Python传递参数的多种方式(小结)
Sep 18 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
Apr 16 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 #Python
Python编写简单的HTML页面合并脚本
Jul 11 #Python
Python中super()函数简介及用法分享
Jul 11 #Python
Swift中的协议(protocol)学习教程
Jul 08 #Python
Python中多线程的创建及基本调用方法
Jul 08 #Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 #Python
Python遍历目录中的所有文件的方法
Jul 08 #Python
You might like
深入PHP中的HashTable结构详解
2013/06/13 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
python 字符串格式化代码
2013/03/17 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python3处理HTTP请求的实例
2018/05/10 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
文秘大学生求职信
2014/02/25 职场文书
相亲大会策划方案
2014/06/05 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
母亲去世追悼词
2015/06/23 职场文书
入党后的感想
2015/08/10 职场文书
创业计划书之游泳馆
2019/09/16 职场文书