Python的ORM框架-SQLAlchemy

ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。

SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

连接数据库
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqldb://root@localhost:3306/blog')#'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

print(engine)
创建表:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer


engine = create_engine('mysql+mysqldb://root@localhost:3306/blog?charset=utf8')
Base = declarative_base()


class User(Base):

    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String(64), nullable=False, index=True)
    password = Column(String(64), nullable=False)
    email = Column(String(64), nullable=False, index=True)


    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)
我们看到,在 User 类中,用 tablename 指定在 MySQL 中表的名字。我们创建了三个基本字段,类中的每一个 Column 代表数据库中的一列,在 Colunm中,指定该列的一些配置。第一个字段代表类的数据类型,上面我们使用 String, Integer 俩个最常用的类型,其他常用的包括:
Text
Boolean
SmallInteger
DateTime
nullable=False 代表这一列不可以为空,index=True 表示在该列创建索引。
另外定义 repr 是为了方便调试,你可以不定义,也可以定义的更详细一些。

简单 CURD

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/8/13 19:35
# @File    : Demo1.py

"""
Python ORM 框架的基本用法

"""


from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
from sqlalchemy.orm import sessionmaker
import faker
from faker import Factory

engine = create_engine('mysql+pymysql://root:1996112lin@localhost:3306/mydata')

Base = declarative_base()


class T1(Base):

    __tablename__ = 't1'

    id = Column(Integer, primary_key=True)
    username = Column(String(64), nullable=False, index=True)
    password = Column(String(64), nullable=False)
    email = Column(String(64), nullable=False, index=True)


    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)

    def __init__(self,username,password,email):
            # self.id=id
            self.username=username
            self.password=password
            self.email=email

def insert():
    Session=sessionmaker(bind=engine)
    session=Session()
    t=T1(username='s',password='s',email='s')
    session.add(t)
    session.commit()

def insert_many():
    Session = sessionmaker(bind=engine)
    session = Session()
    faker = Factory.create()  #生成虚假数据
    faker_users = [T1(
        username=faker.name(),
        password=faker.word(),
        email=faker.email(),
    ) for i in range(10)]
    session.add_all(faker_users)
    session.commit()


def Retrieve():
    Session = sessionmaker(bind=engine)
    session = Session()
    user=session.query(T1).filter_by(username='s').first()
    print(session.query(T1).all())
    print(user)

def Update():
    Session = sessionmaker(bind=engine)
    session = Session()
    t=session.query(T1).filter_by(username='Linda Diaz').first()
    t.email='ksksksk'
    session.add(t)
    session.commit()

def Delete():
    Session = sessionmaker(bind=engine)
    session = Session()
    t=session.query(T1).filter_by(username='Sarah Rubio').first()
    session.delete(t)
    session.commit()


if __name__ == '__main__':
    insert_many()
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐