以下是详细讲解“Python3+SQLAlchemy+Sqlite3实现ORM教程”的完整攻略,包括步骤和两个示例。
什么是ORM?
ORM(Object-Relational Mapping)是一种编程技术,它将对象模型和关系数据库之间的映射自动化。ORM允许开发人员使用面向对象的方式来操作数据库,而不必直接使用SQL语句。
Python3+SQLAlchemy+Sqlite3实现ORM教程
以下是Python3+SQLAlchemy+Sqlite3实现ORM的步骤:
- 安装SQLAlchemy库:
pip install sqlalchemy
- 导入库:
from sqlalchemy 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()
- 创建模型类:继承Base类,定义类名、表名、字段名、字段类型、外键关系等。
- 创建表:
Base.metadata.create_all(engine)
- 插入数据:
session.add(instance)
、session.commit()
- 查询数据:
session.query(Model).filter_by(field=value).all()
- 更新数据:
instance.field = new_value
、session.commit()
- 删除数据:
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时,需要注意以下事项:
- 在创建模型类时,需要使用
__tablename__
属性指定表名,并使用Column()
函数定义字段名和字段类型。 - 在创建模型类时,需要使用
relationship()
函数定义外键关系。 - 在使用会话时,需要使用
add()
函数将实例添加到会话中,并使用commit()
函数提交更改。 - 在使用查询时,需要使用
query()
函数查询数据,并使用all()
函数获取所有结果。 - 在使用更新和删除时,需要使用
commit()
函数提交更改。