如何在Python中使用SQLAlchemy ORM操作数据库?
SQLAlchemy是一个Python ORM(对象关系映射)库,它提供了一种简单的方式来操作关系型数据库。使用SQLAlchemy,我们可以使用Python代码来创建、读取、更新删除关系数据库中的数据。以下是如何在Python中使用SQLAlchemy ORM操作的完整使用攻略,包括连接数据库、创建表、插入数据、查询数据等步骤。同时,提供了两个示例以便更好理解如何在Python中使用SQLAlchemy ORM操作数据库。
步骤1:安装SQLAlchemy
在Python中,我们需要安装SQLAlchemy能使用它来操作关系型数据库。以下是安装SQLAlchemy的基本语法:
!pip install sqlalchemy
在上面的语法中,我们使用pip命令安装SQLAlchemy。
步骤2:连接数据库
在Python中,我们可以使用SQLAlchemy连接关系型数据库。以下是连接的基本法:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db', echo=True)
在上面的语法中,我们首先导入create_engine
函数。然后,我们创建一个连接字符串,并使用create_engine
函数创建一个连接对象。
步骤3:创建表
在SQLAlchemy中我们使用模型来表示关系型数据库中的表。以下是创建表的基本语法:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class Employee(Base):
__tablename__ = 'employees'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
在上面的语法中,我们首先导入declarative_base
函数、Column
类和Integer
、String
类。然后,我们使用declarative_base
函数创建一个基类对象。接着,我们使用Column
类创建模型的字段。在字段中,我们可以设置字段的类型、长度、是否必须等属性。最后,我们使用__tablename__
属性设置表名。
步骤4:插入数据
在Python中,我们可以使用SQLAlchemy插入数据到关系型数据库中。以下是插入数据的基本语法:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
employee = Employee(name='John', age=30)
session.add(employee)
session.commit()
在上面的语法中,我们首先导入sessionmaker
函数。然后,我们使用sessionmaker
函数创建一个Session
类。接着,我们使用Session
类创建一个session
对象。然后,我们一个Employee
对象,并设置name
和age
字段的值。然后,我们使用add
方法将数据插入到关系型数据库中。最后,我们使用commit
方法提交更改。
步骤5:查询数据
在Python中,我们可以使用SQLAlchemy查询关系型数据库中的数据。以下是查询数据的基本语法:
employees = session.query(Employee).all()
for employee in employees:
print(employee.name, employee.age)
在上面的语法中,我们使用query
方法查询Employee
表中的所有数据。然后,我们使用for
循环遍历所有数据,并打印出每个员工的姓名和年龄。
示例
在这个示例中,我们使用SQLAlchemy连接SQLite数据库,并创建一个Employee
表。然后,我们插入一条数据到Employee
表中。接着,我们查询所有数据。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()
class Employee(Base):
__tablename__ = 'employees'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
employee = Employee(name='John', age=30)
session.add(employee)
session.commit()
employees = session.query(Employee).all()
for employee in employees:
print(employee.name, employee.age)
在上面的代码中,我们首先创建一个连接字符串,并使用create_engine
函数创建一个连接对象。然后,我们使用declarative_base
函数创建一个名为Base
的基类对象。在基类中,我们使用Column
类创建id
、name
和age
字段。在id
字段中,我们使用primary_key=True
设置该字段为主键。在__tablename__
属性中,我们设置表名为employees
。
接着,我们使用metadata.create_all
方法创建Employee
表。
然后,我们使用sessionmaker
函数创建一个Session
类。接着,我们使用Session
类创建一个session
对象。然后,我们一个Employee
对象,并设置name
和age
字段的值。然后,我们使用add
方法将数据插入到SQLite数据库中。最后,我们使用commit
方法提交更改。
最后,我们使用query
方法查询Employee
表中的所有数据。然后,我们使用for
循环遍历所有数据,并打印出每个员工的姓名和年龄。
示例2
在这个示例中,我们使用SQLAlchemy连接SQLite数据库,并创建一个Order
表。然后,我们插入两条数据到Order
表中。接着,我们查询所有数据,并更新一条数据和删除一条数据。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
customer_name = Column(String)
order_date = Column(Date)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
order1 = Order(customer_name='John', order_date='2023-05-12')
session.add(order1)
order2 = Order(customer_name='Mary', order_date='2023-05-13')
session.add(order2)
session.commit()
orders = session.query(Order).all()
for order in orders:
print(order.customer_name, order.order_date)
order = session.query(Order).filter_by(customer_name='John').first()
order.order_date = '2023-05-14'
session.commit()
order = session.query(Order).filter_by(customer_name='Mary').first()
session.delete(order)
session.commit()
在上面的代码中,我们首先创建一个连接字符串,并使用create_engine
函数创建一个连接对象。然后,我们使用declarative_base
函数创建一个名为Base
的基类对象。在基类中,我们使用Column
类创建id
、customer_name
和order_date
字段。在id
字段中,我们使用primary_key=True
设置该字段为主键。在__tablename__
属性中,我们设置表名为orders
。
接着,我们使用metadata.create_all
方法创建Order
表。
然后,我们使用sessionmaker
函数创建一个Session
类。接着,我们使用Session
类创建一个session
对象。然后,我们一个Order
对象,并设置customer_name
和order_date
字段的值。然后,我们使用add
方法将数据插入到SQLite数据库中。最后,我们使用commit
方法提交更改。
接着,我们使用query
方法查询Order
表中的所有数据。然后,我们使用for
循环遍历所有数据,并打印出每个订单客户姓名和订单日期。
然后,我们使用query
方法查询Order
表中customer_name
为John
的数据。然后,更新该数据的order_date
字段,并使用commit
方法提交更改。
最后,我们使用query
方法查询Order
表中customer_name
为Mary
的数据。然后,我们使用delete
方法删除该数据。最后,我们使用commit
方法提交更改。