接下来我将详细讲解Python SQLAlchemy的Mapping与Declarative。
什么是SQLAlchemy
SQLAlchemy是一个Python编程语言下的ORM库和SQL工具包。
ORM(Object Relational Mapping)是一种编程技术,用于将数据库和面向对象编程语言之间的数据映射,实现面向对象的编程。SQLAlchemy基于这种技术,提供了一种将对象关系转化为SQL语言的方法,从而实现数据库的操作。
SQLAlchemy的Mapping与Declarative
SQLAlchemy提供了两种ORM编程模型:Mapping和Declarative。
Mapping
Mapping是最初版本的ORM编程模型,它的实现方式是通过将数据库的表和Python中的类进行映射,这样,使用Python类就可以访问数据库中的表数据。
在使用Mapping时,我们需要先建立与数据库的连接,通过metaclass方式定义类,在类中描述映射关系,进行数据查询和更改。
以下是一个简单的Mapping代码示例:
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
在这个示例中,我们通过declarative_base
函数创建了一个基类Base
,所有的映射类都需要继承自这个基类。
类中,使用了__tablename__
属性指定表名,使用Column
函数定义列,设置列的数据类型。
当定义好了映射类之后,我们就可以创建一个与数据库的会话并使用该映射类进行数据的查询和更改:
engine = create_engine('sqlite:///test.db', echo=True)
Base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
user = User(name='test', age=20)
session.add(user)
session.commit()
query = session.query(User).filter_by(name='test')
print(query.first())
在这个示例中,create_engine
函数创建了与SQLite数据库的连接,并使用echo
参数打开调试信息输出。metadata.create_all
函数将映射类创建的表生成到数据库中。
在创建会话之后,使用映射类创建一个新的用户对象,并将其加入到会话中进行提交。最后,通过session.query
函数执行与数据库的查询并打印结果。
Declarative
Declarative是SqlAlchemy的高级ORM模型,它对映射类进行了封装,使用类的继承机制实现对关系的描述,支持更加简单的API、更加直观的查询语句和更加灵活的关系表达方式。
以下是一个简单的Declarative代码示例:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///test.db', echo=True)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
user = User(name='test', age=20)
session.add(user)
session.commit()
query = session.query(User).filter_by(name='test')
print(query.first())
与Mapping相比,Declarative将表的声明与映射类进行了绑定,使得操作更加简单。在创建映射类的时候,只需继承自declarative_base
函数生成的基类Base
,将类的表名和列定义在类中即可。
总结
本文主要介绍了Python SQLAlchemy的Mapping和Declarative两种ORM编程模型,通过示例代码演示了两种模型的使用方式,包括连接数据库、定义映射类、执行增、删、改、查、批量插入、事务等操作。
感谢您的阅读,如果您还有其他问题,请随时提出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python SQLAlchemy的Mapping与Declarative详解 - Python技术站