python使用SQLAlchemy模块连接MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python使用SQLAlchemy模块连接MySQL相关的知识,希望对你有一定的参考价值。

ORM技术:Object-Relational Mapping,负责把关系数据库的表结构映射到对象上。

1.安装SQLAlchemy模块

pip install sqlalchemy

2.初始化连接

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 from sqlalchemy import Column, create_engine
 5 from sqlalchemy.types import *
 6 from sqlalchemy.orm import sessionmaker
 7 from sqlalchemy.ext.declarative import declarative_base
 8 
 9 # 连接数据库
10 sql_connect = ‘mysql://user:[email protected]:port/database‘
11 engine = create_engine(sql_connect)
12 # 创建DBSession类型:
13 DBSession = sessionmaker(bind=engine)

注:红色部分:数据库类型://用户名:口令@机器地址:端口号/数据库名.

完整的则为:数据库类型+数据库驱动://用户名:口令@机器地址:端口号/数据库名

3.自动建表

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 
 4 from sqlalchemy import Column
 5 from sqlalchemy.types import *
 6 from sqlalchemy.ext.declarative import declarative_base
 7 from sqlalchemy import create_engine
 8 from sqlalchemy.orm import sessionmaker
 9 
10 # 连接数据库
11 sql_connect = mysql://ruser:[email protected]:port/datbase
12 engine = create_engine(sql_connect)
13 DBSession = sessionmaker(bind=engine)
14 # 创建对象的基类:
15 BaseModel = declarative_base()
16 
17 #定义对象
18 class User(BaseModel):
19     # 表名
20     __tablename__ = user
21     # 表结构
22     id = Column(String(20), primary_key=True)
23     name = Column(String(20))
24     age = Column(Integer)
25 
26 #初始化数据库
27 def init_db():
28     BaseModel.metadata.create_all(engine)
29 
30 #删除所有数据表
31 def drop_db():
32     BaseModel.metadata.drop_all(engine)

4.添加数据

 1 # 创建session对象,相当于MySQLdb里面的游标
 2 session = DBSession()
 3 # 创建新User对象:
 4 new_user = User(id=2, name=John, age=13)
 5 # 添加到session:
 6 session.add(new_user)
 7 # 提交即保存到数据库
 8 session.commit()
 9 # 关闭session
10 session.close()

5.查询数据

在查询语句中的where子句用filter()替代,不过匹配的值需要用"==";如果使用filter_by(),则使用"="即可。

查询一条:

1 # 创建Session:
2 session = DBSession()
3 # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
4 user = session.query(User).filter(User.name == John, User.age > 12).one()
5 # 打印类型和对象的name属性:
6 print type:, type(user)
7 print age:, user.age
8 # 关闭Session:
9 session.close()

查询多条:

 1  1 # 创建Session:
 2  2 session = DBSession()
 3  3 # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
 4  4 users = session.query(User).filter(User.name == John).all()
 5  5 # 打印类型和对象的name属性:
 6  6 print type:, type(users)
 7  7 for u in users:
 8  8     print u.id
 9  9 # 关闭Session:
10 10 session.close()

6.更新数据

方式一:

1 # 创建Session:
2 session = DBSession()
3 # 可以进行多条数据更新
4 user = session.query(User).filter(User.id == 5)
5 user.update({User.age: 14})
6 # 提交数据
7 session.commit()
8 # 关闭Session
9 session.close()

方式二:

# 创建Session:
session = DBSession()
# 可以进行多条数据更新
user = session.query(User).filter_by(id=‘5‘).one()
user.age = 16
# 提交数据
session.commit()
# 关闭Session
session.close()

7.删除数据

1 # 创建Session
2 session = DBSession()
3 # 删除哪些数据
4 user = session.query(User).filter(User.id == 6).one()
5 session.delete(user)
6 # 提交数据
7 session.commit()
8 # 关闭session
9 session.close()

 

以上是关于python使用SQLAlchemy模块连接MySQL的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy

基础入门_Python-模块和包.深入SQLAlchemy之列级别约束与表级别约束?

python操作mysql(pymysql + sqlalchemy)

Flask12 数据库连接注册模块

python3使用SQLAlchemy连接数据库

Python:数据库操作模块SQLAlchemy