zoukankan      html  css  js  c++  java
  • 004-sqlalchemy-Python_sqlalchemy实现简单的多对多数据表的创建

    1 建立数据表

     1 import sqlalchemy
     2 from sqlalchemy import create_engine,Column,Integer,String,DATE,Table,ForeignKey
     3 from sqlalchemy.orm import sessionmaker,relationship,Mapper
     4 from sqlalchemy.ext.declarative import declarative_base
     5 
     6 # charset=utf8 支持中文
     7 engine = create_engine("mysql+pymysql://Jim:123456@localhost/testdb?charset=utf8",
     8                        encoding="utf-8", echo=True)
     9 Base = declarative_base()
    10 
    11 book_m2m_author = Table(
    12     "book_m2m_author",Base.metadata,
    13     Column("book_id",Integer,ForeignKey("books.id")),
    14     Column("author_id",Integer,ForeignKey("authors.id"))
    15 )
    16 
    17 class Author(Base):
    18     __tablename__ = "authors"
    19     name = Column(String(32),nullable=False)
    20     id = Column(Integer,primary_key=True)
    21     # books = relationship("Book",secondary=book_m2m_author,backref="authors")  #,back_ref="authors"
    22 
    23     def __repr__(self):
    24         return "name:%s" %self.name
    25 
    26 class Book(Base):
    27     __tablename__ = "books"
    28     id = Column(Integer,primary_key=True)
    29     name = Column(String(32),nullable=False)
    30     pub_date = Column(DATE,nullable=False)
    31     authors = relationship("Author",secondary=book_m2m_author,backref="books")
    32 
    33     def __repr__(self):
    34         return "name:%s authors:%s" %(self.name,self.authors)
    35 
    36 # Mapper(Book,book_m2m_author)
    37 Base.metadata.create_all(bind=engine)

    2 添加数据并查看

     1 from sqlalchemy.orm import sessionmaker
     2 import mysql_m2m
     3 
     4 Session_class = sessionmaker(bind=mysql_m2m.engine)
     5 session = Session_class()
     6 
     7 b1 = mysql_m2m.Book(name="hello",pub_date="2011-02-9")
     8 b2 = mysql_m2m.Book(name="world",pub_date="2011-03-9")
     9 b3 = mysql_m2m.Book(name="roal",pub_date="2011-08-9")
    10 
    11 a1 = mysql_m2m.Author(name="Jim")
    12 a2 = mysql_m2m.Author(name="Tom")
    13 a3 = mysql_m2m.Author(name="Mary")
    14 
    15 b1.authors = [a1,a3]
    16 b2.authors = [a2,a1,a3]
    17 
    18 # session.add_all([b1,b2])
    19 
    20 author_obj = session.query(mysql_m2m.Author).filter(mysql_m2m.Author.name=="Jim").first()
    21 print(author_obj.name,author_obj.books)
    22 book_obj = session.query(mysql_m2m.Book).filter(mysql_m2m.Book.id==3).first()
    23 print(book_obj.authors,book_obj.name,book_obj.pub_date)
    24 # book_obj.authors.remove(author_obj)
    25 session.commit()
  • 相关阅读:
    岁月静好
    一代才女林徽因 人生若只如初见
    HTML5手机网站开发页面宽度解决方案
    上帝是公平的
    我一直在坚持,你呢?
    让生命更美丽!
    网页跳转,可以任意规定延迟显示的时间
    !important的用法
    小站初建
    GTD之图表
  • 原文地址:https://www.cnblogs.com/zhidian2020/p/14010694.html
Copyright © 2011-2022 走看看