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++中set的用法
set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值.set不允许两个元素有相同的键值. ...
- HDU 4821 String(BKDRHash)
http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给出一个字符串,现在问你可以找出多少个长度为M*L的子串,该子串被分成L个段,并且每个段的字符串都是 ...
- Linux下清空或删除大文件内容的2种方法
在Linux终端下处理文件时,有时候我们想要直接清空文件的内容时但又不用使用任何Linux命令行编辑器,去打开这些文件.那如何才能达到这个目的呢? 1.通过重定向到NULL来清空文件内容 清空或者让一 ...
- DataTableHelper
public class DataTableHelper { /// <summary> /// 给DataTable增加一个自增列 /// 如果DataTable 存在 identity ...
- React Native 炫酷的动画库 实现任何AE动画 lottie-react-native
lottie-react-native 传送门 1.npm i --save lottie-react-native 2.react-native link lottie-ios 3.react-na ...
- _itemmod_refresh
-- 随机FM刷新设置-- 小技巧:很多服所说的装备鉴定效果可以通过这个实现,也可以对物品重新生成新的附魔--详细解说一下鉴定系统如何实现--1首先在_itemmod_enchant_groups中添 ...
- python 获取进程数据
from multiprocessing import Process, Manager def func(dt, lt): ): key = 'arg' + str(i) dt[key] = i * ...
- python网络编程基础之socket粘包现象
粘包现象两种 登陆 #服务端import json import socket server=socket.socket()#创建socket对象 ip_port=('127.0.0.1',8001) ...
- ip啊
网络模型被OSI分成七层,TCP/IP协议大致对应了2.3.4.7层,分别是数据链路层.网络层.传输层.应用层,IP协议处于网络层上,它的工作原理说白了并不复杂: 整个互联网上所有的机器都有唯一一个I ...
- Qt532.【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt
ZC:具体应该设置 什么参数,可以参看 自己转载的文章:"VC.[转]采用_beginthread__beginthreadex函数创建多线程 - CppSkill - 博客园.html&q ...