python使用SQLAlchemy模块连接MySQL
ORM技术:Object-Relational Mapping,负责把关系数据库的表结构映射到对象上。
1.安装SQLAlchemy,MySQLdb模块
MySQLdb安装教程:http://www.cnblogs.com/jfl-xx/p/7299221.html
SQLAlchemy模块:
pip install sqlalchemy
2.初始化连接
#!/usr/bin/env python
# -*- coding: utf-8 -*- from sqlalchemy import Column, create_engine
from sqlalchemy.types import *
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base # 连接数据库
sql_connect = 'mysql://user:password@hostname:port/database?charset=xx'
engine = create_engine(sql_connect)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
注:红色部分:数据库类型://用户名:口令@机器地址:端口号/数据库名?字符编码.
完整的则为:数据库类型+数据库驱动://用户名:口令@机器地址:端口号/数据库名?字符编码.
例子:sql_connect = 'mysql://root:123456@192.168.1.110:3306/mytest?charset=utf8'
3.自动建表
#!/usr/bin/env python
# -*- coding: utf-8 -*- from sqlalchemy import Column
from sqlalchemy.types import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker # 连接数据库
sql_connect = 'mysql://user:password@hostname:port/datbase?charset=utf8'
engine = create_engine(sql_connect)
DBSession = sessionmaker(bind=engine)
# 创建对象的基类:
BaseModel = declarative_base() #定义对象
class User(BaseModel):
# 表名
__tablename__ = 'user'
# 表结构
id = Column(String(20), primary_key=True)
name = Column(String(20))
age = Column(Integer) #创建映射的数据库表
def init_db():
BaseModel.metadata.create_all(engine) #删除映射的数据库表
def drop_db():
BaseModel.metadata.drop_all(engine)
4.添加数据
# 创建session对象,相当于MySQLdb里面的游标
session = DBSession()
# 创建新User对象:
new_user = User(id='', name='John', age=13)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库
session.commit()
# 关闭session
session.close()
5.查询数据
在查询语句中的where子句用filter()替代,不过匹配的值需要用"==";如果使用filter_by(),则使用"="即可。
查询一条:
# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.name == 'John', User.age > 12).one()
# 打印类型和对象的name属性:
print 'type:', type(user)
print 'age:', user.age
# 关闭Session:
session.close()
查询多条:
1 # 创建Session:
2 session = DBSession()
3 # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
4 users = session.query(User).filter(User.name == 'John').all()
5 # 打印类型和对象的name属性:
6 print 'type:', type(users)
7 for u in users:
8 print u.id
9 # 关闭Session:
10 session.close()
6.更新数据
方式一:
# 创建Session:
session = DBSession()
# 可以进行多条数据更新
user = session.query(User).filter(User.id == '')
user.update({User.age: 14})
# 提交数据
session.commit()
# 关闭Session
session.close()
方式二:
# 创建Session:
session = DBSession()
# 可以进行多条数据更新
user = session.query(User).filter_by(id='5').one()
user.age = 16
# 提交数据
session.commit()
# 关闭Session
session.close()
7.删除数据
# 创建Session
session = DBSession()
# 删除哪些数据
user = session.query(User).filter(User.id == '').one()
session.delete(user)
# 提交数据
session.commit()
# 关闭session
session.close()
python使用SQLAlchemy模块连接MySQL的更多相关文章
- python使用MySQLdb模块连接MySQL
1.安装驱动 目前有两个MySQL的驱动,我们可以选择其中一个进行安装: MySQL-python:是封装了MySQL C驱动的Python驱动:mysql-connector-python:是MyS ...
- Python 2.7_初试连接Mysql查询数据导出到excel_20161216
由于每天到公司都需要先执行一遍检测操作,观察数据是否导入完整,今天想到能否自动连接Mysql执行SQL并导出数据,每天到公司直接查看excel文件即可 时间紧,代码初次试验,边摸索边学习吧. xlsx ...
- Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库
最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...
- python在windows下连接mysql数据库
一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...
- python 通过 pymysql模块 操作 mysql 数据库
Python 中操作 MySQL 步骤 安装模块 pip install pymysql 引入模块 在py文件中引入pymysql模块 from pymysql import * Connection ...
- Python(Django) 连接MySQL(Mac环境)
看django的文档,详细的一塌糊涂,这对文档来时倒是好事,可是数据库连接你别一带而过啊.感觉什么都想说又啥都没说明白,最有用的一句就是推荐mysqlclient.展开一个Django项目首先就是成功 ...
- Python安装MySQLdb并连接MySQL数据库
当然了,前提是你已经安装了Python和MySQL.我的Python是2.6版本的. Python2.6的“Set”有点兼容性问题,自己照着改一下: http://sourceforge.net/fo ...
- 我的python开发目录模块连接
一.python语言 二.HTML 三.css 四.javascript 五.DOM 六.jquery 七.AJAX 八.WEB前端插件 九.自定义WEB框架 十.WEB框架之tornado 十一.M ...
- Python使用cx_Oracle模块连接操作Oracle数据库
1. 简单介绍 cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包含 Oracle 9.2 10.2 以及 11.1 等版本号 2.安装 最好是去官网h ...
随机推荐
- 《C语言程序设计》指针篇<一>
指针 指针是C语言的精华,同时也是其中的难点和重点,我在近日对这一部分内容进行了重新的研读,把其中的一些例子自己重新编写和理解了一遍.此篇博客的内容即是我自己对此书例子的一些理解和总结. 一.大问题: ...
- 文档对象模型DOM
文档对象模型 DOM 1 DOM概述 1.1 什么是DOM 文档对象模型 Document Object Model 提供给用户操作document obj 的标准接口 文档对象模型 是表示和操作 H ...
- angularjs启动项目报ERROR in AppModule is not an NgModule解决方法
这主要是ts编译器版本问题,一般是因为ts编译器版本过高导致. 解决方式: npm uninstall -g typescript npm install -g typescript tsc -v 查 ...
- 【译】第40节---EF6-命令监听
原文:http://www.entityframeworktutorial.net/entityframework6/database-command-interception.aspx 本节,将学习 ...
- FI CO 常用表
FI CO 常用表 最近写FICO的报表写得有点多,许多Table记不住,用F1查找又有点费事,不如把表单写下来,以后用到,直接在这上面找得了. 1,账目表主数据 SKA1 SKB1 S ...
- Gym 100247A The Power of the Dark Side
https://vjudge.net/problem/Gym-100247A 题意: 每个绝地武士有三个能力值a,b,c,两个武士决斗时谁有两个值大于对方谁就是胜者(a和a比,b和b比,c和c比,所有 ...
- Spring依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- mime模块响应或设置Node.js的Content-Type头
转载自:https://itbilu.com/nodejs/core/VJYaAfKrl.html MIME,即:Multipurpose Internet Mail Extensions,多用途 ...
- sql 中常见的控制流语句
控制流语句:1 begin .....end 2 if ...else 例如:if exists (select * from 表名称 ) begin selct * from 表名称 end ...
- python 汉字编码问题
问题描述:我要判断的两个字符串是否相等(‘区站号’==‘区站号’),第一个值是我从txt文件导入的数据,第二个值是我自己定义的并使用decode('utf-8')得到的,如果你用print函数打印这两 ...