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()

 

posted @ 2016-08-17 21:10  TinaGao  阅读(175)  评论(0编辑  收藏  举报