博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第四节 sqlalchemy小实例

Posted on 2017-03-31 10:43  Jasonhy  阅读(210)  评论(0)    收藏  举报

    设计一个能描述"图书"与"作者"的关系的表结构,主要是用来体现多对多在SQLAlchemy的使用方法,需求是一本书可以有好几个作者和一个作者可以写好基本书。这时候我们需要设计一张中间表book_m2m_author来实现关联。

    设计表:

# orm_m2m.py
from
sqlalchemy import Table,Column,Integer,String,DATE,ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine Base = declarative_base() # 第三张表 会自动创建 又orm自动维护 book_m2m_author = Table("book_m2m_author",Base.metadata, Column("book_id",Integer,ForeignKey("books.id")), Column("author_id",Integer,ForeignKey("authors.id")),) # 创建图书表 class Book(Base): __tablename__="books" id = Column(Integer,primary_key=True) name = Column(String(64)) pub_date = Column(DATE) # 由于book不知道第三张表,所以要关联一下第三张表 author = relationship("Author",secondary=book_m2m_author,backref="books") def __repr__(self): return self.name # 创建作者表 class Author(Base): __tablename__="authors" id = Column(Integer,primary_key=True) name = Column(String(32)) def __repr__(self): return self.name # 指定连接编码,解决中文问题 charset=utf8 engine = create_engine("mysql+pymysql://root:@localhost/test?charset=utf8",encoding="utf-8",echo=True) Base.metadata.create_all(engine) # 创建表结构

 

    向设计好的表中添加数据之后,执行查询和删除操作

import orm_m2m
from sqlalchemy.orm import sessionmaker

# 添加数据

# 创建会话
Session_class = sessionmaker(bind=orm_m2m.engine)
# 生成实例
session = Session_class()

'''创建开始'''
# 创建书
# b1 = orm_m2m.Book(name="Python",pub_date="2016-02-10")
# b2 = orm_m2m.Book(name="SQLAlchemy",pub_date="2017-02-13")
# b3 = orm_m2m.Book(name="demo",pub_date="2017-03-31")
#
# # 创建作者
# a1 = orm_m2m.Author(name="Jack")
# a2 = orm_m2m.Author(name="zzzeek")
# a3 = orm_m2m.Author(name="vinta")
#
# # 关联关系
# b1.author = [a1,a3]
# b3.author = [a1,a2,a3]
#
# # 全部添加
# session.add_all([b1,b2,b3,a1,a2,a3])
# session.commit()
'''创建结束'''

'''查询开始'''
author_obj = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="Jack").first()
print(author_obj.books[0:])
book_obj = session.query(orm_m2m.Book).filter(orm_m2m.Book.id == 5).first()
print(book_obj.author)
'''查询结束'''

'''删除开始'''
# 通过书删除作者
author_obj = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="Jack").first()
# book_obj = session.query(orm_m2m.Book).filter(orm_m2m.Book.name=="demo").first()
# # 从一本书删除一个作者
# book_obj.author.remove(author_obj)
session.delete(author_obj.name,author_obj.books)
# 直接删除
session.commit()
'''删除结束'''

     更多案例可查询:https://github.com/zzzeek/sqlalchemy