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 80 81
| #!/usr/bin/env python # -*- coding:utf-8 -*- from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5) #创建引擎,还可以加上echo=True,加上后会显示创建sql的命令
Base = declarative_base() #创建基类
# 创建单表 class Users(Base): __tablename__ = 'users' #表名 id = Column(Integer, primary_key=True) #必须要有主键,且主键是自增的 name = Column(String(32)) extra = Column(String(16))
__table_args__ = ( UniqueConstraint('id', 'name', name='uix_id_name'), Index('ix_id_name', 'name', 'extra'), )
def __repr__(self): #当执行查询的时候返回数据,而不是对象 return "%s-%s" %(self.id, self.name)
# 一对多 class Favor(Base): __tablename__ = 'favor' nid = Column(Integer, primary_key=True) caption = Column(String(50), default='red', unique=True)
def __repr__(self): return "%s-%s" %(self.nid, self.caption)
class Person(Base): __tablename__ = 'person' nid = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=True) favor_id = Column(Integer, ForeignKey("favor.nid")) #建立外键 # 与生成表结构无关,仅用于查询方便 favor = relationship("Favor", backref='pers') #更方便查询,语句的意思是person关联Favor,反过来
# 多对多 class ServerToGroup(Base): __tablename__ = 'servertogroup' nid = Column(Integer, primary_key=True, autoincrement=True) server_id = Column(Integer, ForeignKey('server.id')) group_id = Column(Integer, ForeignKey('group.id')) group = relationship("Group", backref='s2g') server = relationship("Server", backref='s2g')
class Group(Base): __tablename__ = 'group' id = Column(Integer, primary_key=True) name = Column(String(64), unique=True, nullable=False) port = Column(Integer, default=22) # group = relationship('Group',secondary=ServerToGroup,backref='host_list')
class Server(Base): __tablename__ = 'server'
id = Column(Integer, primary_key=True, autoincrement=True) hostname = Column(String(64), unique=True, nullable=False)
def init_db(): Base.metadata.create_all(engine)
def drop_db(): Base.metadata.drop_all(engine)
#创建session对象,实现增删改查 Session = sessionmaker(bind=engine) session = Session()
|