1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
from sqlalchemy import *
from sqlalchemy import create_engine
from sqlalchemy.orm import *
from sqlalchemy.orm.collections import *
from sqlalchemy.ext.associationproxy import *
from sqlalchemy.ext.declarative import *
engine = create_engine('sqlite:///test.db', echo=True)
Base = declarative_base(bind=engine)
metadata = Base.metadata
# association table
post_keywords = Table('post_keywords', metadata,
Column('post_id', Integer, ForeignKey('posts.id')),
Column('keyword_id', Integer, ForeignKey('keywords.id'))
)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
class BlogPost(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
author = relation(User, backref=backref('posts', lazy='dynamic'))
body = Column(Text)
# many to many
keywords = relation('Keyword', secondary=post_keywords, backref='posts')
def __init__(self, body, author):
self.author = author
self.body = body
class Keyword(Base):
__tablename__ = 'keywords'
id = Column(Integer, primary_key=True)
keyword = Column(String(50), nullable=False, unique=True)
def __init__(self, keyword):
self.keyword = keyword
metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
ed_user = User('zed', 'Zed Bows', 'password')
jo_user = User('jo', 'Jo lbdeo', 'pwd')
session.add(ed_user)
session.add(jo_user)
key1 = Keyword("keyword1")
key2 = Keyword("keyword2")
session.add(key1)
session.add(key2)
post1 = BlogPost("bodybodydbodezfdkjsdflksfdbody", jo_user)
post1.keywords.append(key1)
post1.keywords.append(key2)
session.add(post1)
session.commit() |
Partager