標籤:資料庫表 設定檔 python classic sqlalchemy
先看一下sqlalchemy架構中的映射,sqlalchemy一共有三種映射方式:傳統映射(classic)、
現代化映射(modern)、自訂映射。
在這裡,只為大家講一下classic映射和modern映射。
classic映射:
顧名思義,就是類似於hibernate那樣,要寫好多設定檔,這裡放一個小例子:
#coding=utf-8from sqlalchemy import Table, MetaData, Column, Integer, String, DateTime from datetime import datetime from sqlalchemy.engine import create_engine ‘‘‘‘‘與資料庫建立連結‘‘‘ engine = create_engine("mysql://username:[email protected]/databasename",isolation_level="READ UNCOMMITTED") ‘‘‘‘‘資料庫表與對象之間的映射關係,類於hibernate中的xml設定檔‘‘‘ metadata = MetaData() people = Table( #people ‘people‘, metadata, Column(‘id‘, Integer, primary_key=True), Column(‘name‘, String(16), unique=True, nullable=False), Column(‘gender‘, String(255), unique=True, nullable=True), Column(‘created‘, DateTime, default=datetime.now) ) student = Table( #student ‘student‘, metadata, Column(‘id‘, Integer, primary_key=True), Column(‘name‘, String(16), unique=True, nullable=False), Column(‘gender‘, String(255), unique=True, nullable=True), Column(‘created‘, DateTime, default=datetime.now) ) teacher = Table( #teacher ‘teacher‘, metadata, Column(‘id‘, Integer, primary_key=True), Column(‘name‘, String(16), unique=True, nullable=False), Column(‘gender‘, String(255), unique=True, nullable=True), Column(‘created‘, DateTime, default=datetime.now) ) ‘‘‘‘‘建立資料庫的類‘‘‘ class People(object):pass class Student(object):pass class Teacher(object):pass ‘‘‘‘‘傳統映射方式‘‘‘ mapper(People,people) mapper(Student,student) mapper(Teacher,teacher) ‘‘‘‘‘建立表‘‘‘ metadata.create_all(engine)
此時,如果我們再寫一個*.py檔案
代碼如下:
from dbproject.dbsetting import People,Teacher,enginefrom sqlalchemy.orm import sessionmakerpeople = People()teahcer = Teacher()people.name=‘renlei‘people.id=1teahcer.name=‘laoshi‘teahcer.id=1Session = sessionmaker()Session.configure(bind=engine)session = Session()session.add(people)session.add(teahcer)session.flush()session.commit()
編譯運行這個python檔案,就會探索資料庫中的資訊發生了相應變化。
modern映射:
如下,先寫一個modern.py檔案,代碼:
#coding=utf-8from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.engine import create_engine‘‘‘與資料庫建立連結‘‘‘engine = create_engine("mysql://username:[email protected]/databasename",isolation_level="READ UNCOMMITTED") ‘‘‘資料庫表結構‘‘‘Base = declarative_base()class People():#定義一個基類當然也可以不定義,這裡只是給個例子 id = Column(Integer, primary_key=True) name = Column(String(16)) gender = Column(String(16)) age = Column(String(16))class User(Base,People): __tablename__ = ‘users‘ fullname = Column(String(16)) password = Column(String(16))class AdvancedUser(Base,People): __tablename__ = ‘advanceduser‘ fullname = Column(String(16)) password = Column(String(16)) email = Column(String(16)) class Teacher(Base,People): __tablename__ = ‘teacher‘ phone = Column(String(16))#建立所有的表Base.metadata.create_all(engine)
接入來再寫一個control.py檔案,代碼:
#coding=utf-8from sqlalchemy.orm.session import sessionmakerfrom modern import engine,User,AdvancedUser,Teacheruser = User()user.name = ‘username‘user.gender = ‘male‘au = AdvancedUser()au.name = ‘auname‘au.gender = ‘female‘teacher = Teacher()teacher.name = ‘wangdi‘teacher.gender = ‘female‘teacher.phone = ‘15264397652‘Session = sessionmaker()Session.configure(bind=engine)session = Session()session.add(user)session.add(au)session.add(teacher)session.flush()session.commit()
編譯執行代碼,會探索資料庫內資訊有變化,怎麼樣,與classic映射相比,這種寫法是不是更方便啊。
這樣,我們就可以省去大量的sql語句,直接使用python代碼來完成。
本文出自 “逸塵” 部落格,謝絕轉載!
python的sqlalchemy架構