Python的ORM框架-SQLAlchemy

时间:2022-12-01 03:53:07

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()