Python3+SQLAlchemy+Sqlite3实现ORM教程

  • Post category:Python

以下是详细讲解“Python3+SQLAlchemy+Sqlite3实现ORM教程”的完整攻略,包括步骤和两个示例。

什么是ORM?

ORM(Object-Relational Mapping)是一种编程技术,它将对象模型和关系数据库之间的映射自动化。ORM允许开发人员使用面向对象的方式来操作数据库,而不必直接使用SQL语句。

Python3+SQLAlchemy+Sqlite3实现ORM教程

以下是Python3+SQLAlchemy+Sqlite3实现ORM的步骤:

  1. 安装SQLAlchemy库:pip install sqlalchemy
  2. 导入库:from sqlalchemy create_engine, Column, Integer, String, DateTime, ForeignKeyfrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalchemy.ext.declarative import declarative_base
  3. 创建数据库引擎:engine = create_engine('sqlite:///example.db', echo=True)
  4. 创建会话:Session = sessionmaker(bind=engine)session = Session()
  5. 创建基类:Base = declarative_base()
  6. 创建模型类:继承Base类,定义类名、表名、字段名、字段类型、外键关系等。
  7. 创建表:Base.metadata.create_all(engine)
  8. 插入数据:session.add(instance)session.commit()
  9. 查询数据:session.query(Model).filter_by(field=value).all()
  10. 更新数据:instance.field = new_valuesession.commit()
  11. 删除数据:session.delete(instance)session.commit()

示例1:创建一个用户模型类

以下是一个示例代码,用于创建一个用户模型类:

from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///example.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

    def __repr__(self):
        return f"<User(name='{self.name}', email='{self.email}')>"

Base.metadata.create_all(engine)

在这个示例中,我们首先导入了create_engine、Column、Integer、String、DateTime、ForeignKey、sessionmaker、relationship和declarative_base等类和函数。然后,我们创建了一个数据库引擎和一个会话。接着,我们创建了一个基类,并定义了一个用户模型类。最后,我们使用metadata.create_all()函数创建了一个用户表。

示例2:插入和查询用户数据

以下是一个示例代码,用于插入和查询用户数据:

from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///example.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

    def __repr__(self):
        return f"<User(name='{self.name}', email='{self.email}')>"

Base.metadata.create_all(engine)

user1 = User(name='Alice', email='alice@example.com')
user2 = User(name='Bob', email='bob@example.com')

session.add(user1)
session.add(user2)
session.commit()

users = session.query(User).all()
for user in users:
    print(user)

在这个示例中,我们首先导入了create_engine、Column、Integer、String、DateTime、ForeignKey、sessionmaker、relationship和declarative_base等类和函数。然后,我们创建了一个数据库引擎和一个会话。接着,我们创建了一个基类,并定义了一个用户模型类。然后,我们创建了两个用户实例,并使用add()函数将它们添加到会话中。最后,我们使用query()函数查询所有用户,并使用all()函数获取所有结果。然后,我们遍历结果,并使用print()函数输出每个用户的名称和电子邮件地址。

注意事项

在使用Python3+SQLAlchemy+Sqlite3实现ORM时,需要注意以下事项:

  1. 在创建模型类时,需要使用__tablename__属性指定表名,并使用Column()函数定义字段名和字段类型。
  2. 在创建模型类时,需要使用relationship()函数定义外键关系。
  3. 在使用会话时,需要使用add()函数将实例添加到会话中,并使用commit()函数提交更改。
  4. 在使用查询时,需要使用query()函数查询数据,并使用all()函数获取所有结果。
  5. 在使用更新和删除时,需要使用commit()函数提交更改。