Python的SQLalchemy模块连接与操作MySQL的基础示例
作者:linda1000 发布时间:2024-01-20 07:37:13
一、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, 也可导入
综上,使用关系映射可以方便地从一个对象直接找到相对应的其他的对象
猜你喜欢
- 这是一种相对比较复杂的图表,但是仍然遵循上篇中提出的最基本的思路。本例中使用的定义列表标签dl可能平常我们见得不多,一般我们在做列表的时候通
- 前言:如果正在看文章的你,还不会绘制折线图,请看如何使用matplotlib绘制折线图这篇文章,该文章会仔细而详尽的告诉你绘制折线图的方法。
- 一、python多线程因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只
- Fiddler简介Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddl
- 这篇文章主要介绍了Python PyPDF2模块安装使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 本文实例讲述了Python3实现的Mysql数据库操作封装类。分享给大家供大家参考,具体如下:#encoding:utf-8#name:mo
- 使用cv2.imread(),cv2.imshow(),cv2.imwrite()读取、显示和保存图像一、读入图像使用函数cv2.imrea
- php从5.2.x升级到5.3.2.出来问题了。有些原来能用的程序报错了。报错内容是Deprecated: Function session
- 在进行接口自动化测试时,有好多接口都基于登陆接口的响应值来关联进行操作的,在次之前试了很多方法,都没有成功,其实很简单用session来做。
- 本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下:在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用she
- 当你有多个进程或线程访问相同的数据时,竞争条件是一个威胁。本文探讨了在发现竞争条件后如何测试它们。Incrmnt你在一个名为“Incrmnt
- 这次自己做了一个小程序来玩,在登录方面一直有些模糊,网上看了很多文档后,得出以下一种解决方案。环境说明:1、小程序只需要拿到openid,其
- 阅读上一节:无序列表信息有时候是无序归纳的,有的却有着明确的顺序,在上一篇也提到了。那么简单的来想一下身边有哪些事物是有先后顺序的:操作步骤
- 前言模块在其自身的作用域里执行,而不是在全局作用域里;这意味着定义在一个模块里的变量,函数,类等等在模块外部是不可见的,除非你明确地使用ex
- Python能够干嘛?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站像知乎、YouTube就是Python写的;可以做网
- 这一篇笔记我们简述一下MySQL的B+Tree索引到底是咋回事?聚簇索引索引到底是如何长高的。一点一点看,其实蛮好理解的。如果你看过了我之前
- 前言有一天朋友A向我抱怨,他的老板要求他把几百份word填好的word表格简历信息整理到excel中,看着他一个个将姓名,年龄……从word
- gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平
- 切片:方便截取list、tuple、字符串部分索引的内容正序切片语法:dlist = doList[0:3]表示,从索引0开始取,直到索引3
- 在创建SQL Server 2000 故障转移群集之前,必须配置 Microsoft 群集