Python语言学习 (五)1.2
ORM:
表映射到类
行映射到对象
列映射到属性
程序的分层架构:
三层结构(表示层,业务逻辑层,数据库层)
四层结构(表示层,业务逻辑层,持久化层,数据库层)
多层结构
分层的优点:
伸缩性
重用
维护
SQLAlchemy的优点:
隐藏数据库实现,业务代码操作对象而不是数据库表
开发效率高,无需编写SQL代码就可完成数据库操作
良好的数据库操作接口,简单,学习成本低
动态数据表映射
缺点:不容易做数据库查询优化,可能带来性能上的损失。
开发步骤:
创建连接
创建映射
初始化映射实例
创建会话
持久化对象实例
#encoding=utf-8
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship, backref
#1. 创建连接
engine = create_engine('mysql+mysqlconnector://root:123456@127.0.0.1:3306/test?charset=utf8',echo = True)
#2. 定义映射:
#声明基类:
Base = declarative_base()
#声明对象和实体映射类,继承基类。
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(40))
address = Column(String(100))
def __str__(self):
return "User(id = {0}, name = {1}, address = {2})".format(self.id, self.name,self.address)
#3. 映射实例化,创建数据库表
Base.metadata.create_all(engine)
#4. 创建会话
Session = sessionmaker(engine)
session = Session()
#5. 操作数据库
#插入一条数据
# u1 = User(name = 'tina', address = 'beijing')
# print u1.id
# session.add(u1)
# session.commit()
# print u1.id
#插入多条数据
# us = [
# ('tina1', 'abc'),
# ('tina2', 'abc'),
# ('tina3', 'abc'),
# ('tina4', 'abc'),
# ('tina5', 'abc'),
# ('tina6', 'abc')
# ]
#
# for u in us:
# u2 = User(name = u[0], address = u[1])
# session.add(u2)
# session.commit()
#查询
# u1 = session.query(User).filter(User.name.like('ti%')).all()
# for u in u1:
# print u
#更新
# u1 = session.query(User).filter(User.name == 'tina').first()
# print u1
#
# u1.address = 'jilin'
# session.commit()
#删除
u1 = session.query(User).filter(User.name == 'tina').first()
print u1
session.delete(u1)
session.commit()