SQLAlchemy对象关系映射器提供了一种将用户定义的Python类与数据库表以及这些类(对象)的实例与相应表中的行关联起来的方法。它包括一个透明地同步对象及其相关行之间状态的所有更改的系统,称为 unit of work 以及用用户定义的类及其相互之间定义的关系表示数据库查询的系统。
ORM与用于构造ORM的SQLAlchemy表达式语言形成对比。而SQL表达式语言 SQL表达式语言教程 提出了一种直接表示关系数据库原始结构而不加意见的系统,ORM提出了一种高级抽象的使用模式,它本身就是表达式语言应用的一个例子。
尽管ORM和表达语言的使用模式有重叠,但相似性比最初可能出现的更为肤浅。一种方法是从用户定义的角度来处理数据的结构和内容。 domain model 它透明地持久化并从其底层存储模型中刷新。另一种方法是从文本模式和SQL表达式表示的角度进行处理,这些表达式显式地组合成数据库单独使用的消息。
成功的应用程序可以只用对象关系映射器来构造。在高级情况下,使用ORM构建的应用程序可能会在某些需要特定数据库交互的区域中偶尔直接使用表达式语言。
实例:
```python
from sqlalchemy import create_engine, Integer,String,Float
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
#创建数据库的连接
engine = create_engine("mysql+mysqlconnector://root:root@127.0.0.1:3306/job?charset=utf8")
#操作数据库,需要我们创建一个session
Session = sessionmaker(bind=engine)
#声明一个基类
Base = declarative_base()
class Jobtables(Base):
#表名称
__tablename__ = 'job_data'
#id,设置为主键和自动增长
id = Column(Integer,primary_key=True,autoincrement=True)
#岗位ID,非空字段
positionID = Column(Integer,nullable=True)
# 经度
longitude = Column(Float, nullable=False)
# 纬度
latitude = Column(Float, nullable=False)
# 岗位名称
positionName = Column(String(length=50), nullable=False)
# 工作年限
workYear = Column(String(length=20), nullable=False)
# 学历
education = Column(String(length=20), nullable=False)
# 岗位性质
jobNature = Column(String(length=20), nullable=True)
# 公司类型
financeStage = Column(String(length=30), nullable=True)
# 公司规模
companySize = Column(String(length=30), nullable=True)
# 业务方向
industryField = Column(String(length=30), nullable=True)
# 所在城市
city = Column(String(length=10), nullable=False)
# 岗位标签
positionAdvantage = Column(String(length=200), nullable=True)
# 公司简称
companyShortName = Column(String(length=50), nullable=True)
# 公司全称
companyFullName = Column(String(length=200), nullable=True)
# 公司所在区
district = Column(String(length=20), nullable=True)
# 公司福利标签
companyLabelList = Column(String(length=200), nullable=True)
# 工资
salary = Column(String(length=20), nullable=False)
if __name__ == '__main__':
#创建数据表
Jobtables.metadata.create_all(engine)```