python的sqlalchemy框架

先看一下sqlalchemy框架中的映射,sqlalchemy一共有三種映射方式:傳統映射(classic)、
現代化映射(modern)、自定義映射。
在這裏,只爲大家講一下classic映射和modern映射。


classic映射:
顧名思義,就是類似於hibernate那樣,要寫好多配置文件,這裏放一個小例子:

#coding=utf-8
from sqlalchemy import Table, MetaData, Column, Integer, String, DateTime  
from datetime import datetime  
from sqlalchemy.engine import create_engine  
'''''與數據庫建立鏈接'''  
engine = create_engine("mysql://username:password@databasehost/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,engine
from sqlalchemy.orm import sessionmaker
people = People()
teahcer = Teacher()
people.name='renlei'
people.id=1
teahcer.name='laoshi'
teahcer.id=1
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
session.add(people)
session.add(teahcer)
session.flush()
session.commit()

編譯運行這個python文件,就會發現數據庫中的信息發生了相應變化。


modern映射:

如下,先寫一個modern.py文件,代碼:

#coding=utf-8
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.engine import create_engine
'''與數據庫建立鏈接'''
engine = create_engine("mysql://username:password@databasehost/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-8
from sqlalchemy.orm.session import sessionmaker
from modern import engine,User,AdvancedUser,Teacher
user = 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代碼來完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章