📜  SQLAlchemy ORM-文本SQL(1)

📅  最后修改于: 2023-12-03 15:35:06.922000             🧑  作者: Mango

SQLAlchemy ORM-文本SQL

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')

其中,userpassword是数据库账号和密码,hostport是数据库所在的主机和端口号(默认为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的表。其中的idnameage分别是数据表中的字段。

增删改查

利用定义好的数据表类,可以很方便地进行增删改查操作。例如:

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方法查询一条或多条记录,然后进行修改或删除即可。

SQL Expression语言

除了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的用户记录,并且使用engineexecute方法直接执行。在文本SQL语句中可以使用类似:age来代表参数,然后通过execute方法的参数传入即可。

总结

SQLAlchemy ORM-文本SQL是Python中非常强大和灵活的操作关系型数据库的方式。通过ORM可以定义数据表和数据表类,然后进行增删改查操作;通过SQL Expression语言可以方便地使用文本SQL语句进行数据库操作。这些都使得Python开发人员可以更加高效地操作关系型数据库。