SQLAlchemy「採用簡單的Python語言,爲高效和高性能的數據庫訪問設計,實現了完整的企業級持久模型」。SQLAlchemy的理念是,SQL數據庫的量級和性能重要於對象集合;而對象集合的抽象又重要於表和行。所以,SQLAlchmey採用了相似於Java裏Hibernate的數據映射模型,而不是其餘ORM框架採用的Active Record模型。不過,Elixir和declarative等可選插件能夠讓用戶使用聲明語法。python
安裝mysql
pip3 install SQLAlchemyweb
pip3 install pymysql #須要pymysql或者MySQLdb的支持sql
鏈接數據庫數據庫
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
下面咱們看一個例子:session
#導入想關模塊from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship engine = create_engine("mysql+pymysql://root:123456@192.168.11.12:3306/haha", encoding='utf-8', max_overflow=5) # DBSession = sessionmaker(bind=engine) #實例化 Base = declarative_base() # 主機表 class Host(Base): #聲明類 __tablename__ = 'host' #須要建立的表名 nid = Column(Integer, primary_key=True, autoincrement=True) #定義主鍵,自增1 ,其實這裏還能夠有其餘參數 hostname = Column(String(32)) ip = Column(String(32), unique=True) port = Column(String(32)) host_user = relationship('HostUser',secondary=lambda: HostToHostUser.__table__,backref='h')#映射表的外鍵 # 主機用戶表 class HostUser(Base): __tablename__ = 'host_user' nid = Column(Integer, primary_key=True, autoincrement=True) username = Column(String(32)) passwd = Column(String(32)) # 主機用戶與主機關係表 class HostToHostUser(Base): __tablename__ = 'host_to_hostuser' nid = Column(Integer, primary_key=True, autoincrement=True) user_nid = Column(Integer, ForeignKey('host_user.nid')) host_nid = Column(Integer, ForeignKey('host.nid')) host = relationship('Host', backref='h') host_user = relationship('HostUser', backref='u') # 審計表 class AuditLog(Base): __tablename__ = 'audit_log' nid = Column(Integer, primary_key=True) user_nid = Column(Integer, ForeignKey('host_user.nid')) host_nid = Column(Integer, ForeignKey('host.nid')) cmd = Column(String(255)) date = Column(String(255)) def init_db(): Base.metadata.create_all(engine) def drop_db(): Base.metadata.drop_all(engine) init_db() Session = sessionmaker(bind=engine) session = Session() # # session.add_all(( Host(hostname='web1', ip='192.168.11.12', port='22', ), Host(hostname='web2', ip='192.168.11.23', port='22', ), Host(hostname='web3', ip='192.168.11.34', port='22', ), Host(hostname='web4', ip='192.168.11.45', port='22', ), Host(hostname='web5', ip='192.168.11.228', port='22', ), )) session.commit() session.add_all([ HostUser(username='madking', passwd='123', ), HostUser(username='oldboy', passwd='123', ), ]) session.commit() session.add_all(( HostToHostUser(user_nid='1', host_nid='1', ), HostToHostUser(user_nid='1', host_nid='2', ), HostToHostUser(user_nid='1', host_nid='5', ), HostToHostUser(user_nid='2', host_nid='1', ), )) session.commit()