zoukankan      html  css  js  c++  java
  • Mysql-Sqlalchemy-ORM-many_to_many



    orm_m2m.py
    from sqlalchemy import Table,Column,Integer,String,DATE, ForeignKey
    from  sqlalchemy.orm import relationship ,sessionmaker
    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)
        authors =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:521521@192.168.71.140/oldboy?charset=utf8",
                           )  # 可以加echo=True显示数据
    
    Base.metadata.create_all(engine)#创建表结构
    
    orm_m2m_api.py


    from day12 import orm_m2m
    
    from sqlalchemy.orm import sessionmaker
    
    Session_class = sessionmaker(bind=orm_m2m.engine)
    
    Session =Session_class()#游标
    
    '''插入数据'''
    Python = orm_m2m.Book(name="Python", pub_date="2018-07-17")
    Java = orm_m2m.Book(name="JAVA", pub_date="2018-07-16")
    Php = orm_m2m.Book(name="PHP", pub_date="2018-07-15")
    
    a1 = orm_m2m.Author(name="xiaopang")
    a2 = orm_m2m.Author(name="dapangpang")
    a3 = orm_m2m.Author(name="Xiaopang_to_Dapangpang")
    
    # Python.authors=[a1,a2]
    # Java.authors=[a1,a2,a3]
    # Php.authors = [a1,a3]
    # Session.add_all([Python,Java,Php,a1,a2])
    '''查询数据'''
    #查找dapangpang这个作者创作了几本书
    author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
    print(author_obj)
    #查找orm_m2m.Book.id==1的这本书有几个作者
    book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==2).first()
    print(book_obj.authors)
    
    '''删除数据'''
    book_obj =Session.query(orm_m2m.Book).filter(orm_m2m.Book.id==1).first()
    book_obj.authors.remove(author_obj)#从一本书里删除一个作者
    
    #删除作者
    author_obj =Session.query(orm_m2m.Author).filter(orm_m2m.Author.name=="dapangpang").first()
    Session.delete(author_obj)
    Session.commit()#提交
    
  • 相关阅读:
    django template extends
    python sys.path的用法
    django form 显示
    django form 验证
    WingIDE 下载,介绍和配置
    python startswith
    django reverse()
    python 动态创建类
    django form 定义
    如何学习python
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/9328396.html
Copyright © 2011-2022 走看看