📅  最后修改于: 2023-12-03 15:35:06.922000             🧑  作者: Mango
SQLAlchemy ORM(对象关系映射)提供了一种在Python中操作关系型数据库的方式,并且可以通过文本SQL直接操作数据库。这是一个十分强大和灵活的工具。
使用pip安装SQLAlchemy即可:
pip install sqlalchemy
同时还需要安装psycopg2
(用于操作PostgreSQL数据库)或mysqlclient
(用于操作MySQL数据库)等依赖库。
使用SQLAlchemy ORM时,首先需要建立与数据库的连接。例如:
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:password@host:port/database')
其中,user
和password
是数据库账号和密码,host
和port
是数据库所在的主机和端口号(默认为5432),database
是数据库名称。SQLite的连接字符串比较简单:
engine = create_engine('sqlite:///database.db')
使用SQLAlchemy ORM需要先定义数据表。可以通过继承Base
类,创建自定义的数据表类,来映射关系型数据库中的表。例如:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
上面的代码定义了一个名为User
的数据表类,对应了关系型数据库中名为users
的表。其中的id
、name
和age
分别是数据表中的字段。
利用定义好的数据表类,可以很方便地进行增删改查操作。例如:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
# 添加一条用户记录
user = User(name='John', age=30)
session.add(user)
session.commit()
# 修改一条用户记录
user = session.query(User).filter_by(name='John').first()
user.age = 31
session.commit()
# 删除一条用户记录
user = session.query(User).filter_by(name='John').first()
session.delete(user)
session.commit()
# 查询多条用户记录
users = session.query(User).filter_by(age=30).all()
for user in users:
print(user.name, user.age)
通过sessionmaker
创建的Session
对象可以用于和数据库的交互。例如通过add
方法添加一条记录,然后通过commit
方法提交到数据库,通过query
方法查询一条或多条记录,然后进行修改或删除即可。
除了ORM之外,SQLAlchemy还提供了SQL Expression语言,可以方便地使用文本SQL语句进行数据库操作。例如:
from sqlalchemy import text
result = engine.execute(text('SELECT * FROM users WHERE age=:age'), age=30)
for row in result:
print(row['name'], row['age'])
上面的代码通过文本SQL语句查询所有age
为30的用户记录,并且使用engine
的execute
方法直接执行。在文本SQL语句中可以使用类似:age
来代表参数,然后通过execute
方法的参数传入即可。
SQLAlchemy ORM-文本SQL是Python中非常强大和灵活的操作关系型数据库的方式。通过ORM可以定义数据表和数据表类,然后进行增删改查操作;通过SQL Expression语言可以方便地使用文本SQL语句进行数据库操作。这些都使得Python开发人员可以更加高效地操作关系型数据库。