SQLAlchemy是一个流行的Python ORM框架,可以将关系型数据库表现为Python类和对象,方便地进行数据库操作。以下是SQLAlchemy ORM常用的操作和知识点:
- 创建表格:使用declarative_base()函数创建一个基类,并定义表格的列和属性。例如:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
- 建立会话:使用Session类建立会话,并通过commit()方法提交更改。例如:
from sqlalchemy.orm import Session
session = Session()
user = User(name='Tom', age=25)
session.add(user)
session.commit()
- 查询数据:使用query()方法查询数据。例如:
user = session.query(User).filter_by(name='Tom').first()
- 修改数据:使用query()方法查询数据后,通过更改对象属性,再次使用commit()方法提交更改。例如:
user = session.query(User).filter_by(name='Tom').first()
user.age = 26
session.commit()
- 删除数据:使用delete()方法删除对象,并通过commit()方法提交更改。例如:
user = session.query(User).filter_by(name='Tom').first()
session.delete(user)
session.commit()
- 多表查询:使用join()方法将多个表连接,并使用filter()方法过滤条件。例如:
from sqlalchemy import join
query = session.query(User, Address).join(Address, User.id == Address.user_id).filter(User.name == 'Tom')
- 一对多关系:使用relationship()方法定义一对多关系。例如:
from sqlalchemy.orm import relationship
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
addresses = relationship('Address', backref='user')
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
email = Column(String)
- 在实际项目中,一对多关系通常用于表示一个主表记录对应多个从表记录的情况,例如一个用户可以有多个地址。
下面是一个添加用户和地址的示例:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
# 创建数据库引擎和会话工厂
engine = create_engine('mysql+pymysql://username:password@localhost:3306/dbname?charset=utf8mb4')
Session = sessionmaker(bind=engine)
# 定义用户和地址类
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
addresses = relationship('Address', backref='user')
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
email = Column(String)
# 创建用户和地址记录
session = Session()
user = User(name='Tom', age=25)
address1 = Address(email='tom@example.com')
address2 = Address(email='tom@gmail.com')
user.addresses = [address1, address2]
# 提交更改
session.add(user)
session.commit()
网友评论