Python与SQLAlchemy:轻松管理数据库

安全建
• 阅读 845

在这篇文章中,我们将学习如何使用Python和SQLAlchemy库来轻松管理数据库。SQLAlchemy是一个强大的ORM(对象关系映射)库,它允许您通过Python代码与关系型数据库进行交互,而无需编写SQL语句。

一、安装SQLAlchemy

首先,确保您已经安装了Python。然后,使用以下命令安装SQLAlchemy库:

pip install sqlalchemy

二、创建数据模型

在开始使用SQLAlchemy之前,我们需要创建一个数据模型来表示我们的数据。例如,假设我们有一个简单的应用程序,需要存储用户信息。我们可以创建一个User类来表示用户数据:

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)
    email = Column(String)

这里,我们首先从SQLAlchemy中导入所需的类和函数,然后创建一个User类,它继承自Base。我们定义了一个表名users,以及表示用户数据的列。

三、设置数据库连接

接下来,我们需要设置一个数据库连接。在这个例子中,我们将使用SQLite数据库,但SQLAlchemy支持多种数据库系统。创建一个名为database.py的文件,并添加以下代码来设置数据库连接:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from model import Base, User

DATABASE_URL = 'sqlite:///users.db'

engine = create_engine(DATABASE_URL)
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

这里,我们导入了之前创建的User类以及一些其他SQLAlchemy组件。我们指定了一个SQLite数据库文件users.db,然后创建了一个连接引擎。我们还创建了一个Session类,用于与数据库进行交互。

四、CRUD操作

现在我们已经设置好了数据库连接,我们可以执行一些基本的CRUD操作。以下是一些示例:

  • 创建(Create)

    要添加新用户,我们可以创建一个新的User对象,然后将其添加到会话中:

    new_user = User(name='John Doe', age=30, email='john.doe@example.com')
    session.add(new_user)
    session.commit()
  • 读取(Read)

    若要从数据库中查询用户,我们可以使用session.query()方法:

    users = session.query(User).all()
    for user in users:
        print(user.name, user.age, user.email)
  • 更新(Update)

    若要更新现有用户的信息,我们可以查询用户,修改属性,然后提交更改:

    user = session.query(User).filter(User.email == 'john.doe@example.com').first()
    if user:
        user.age = 31
        session.commit()
  • 删除(Delete)

    若要从数据库中删除用户,我们可以查询用户,然后将其从会话中删除:

    user = session.query(User).filter(User.email == 'john.doe@example.com').first()
    if user:
        session.delete(user)
        session.commit()

五、关联和外键

SQLAlchemy还支持表之间的关联和外键。例如,假设我们的应用程序还需要存储订单信息。我们可以创建一个Order类,并将其与User类关联:

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Order(Base):
    __tablename__ = 'orders'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    product_name = Column(String)
    price = Column(Integer)

    user = relationship("User", back_populates="orders")

User.orders = relationship("Order", back_populates="user")

这里,我们创建了一个新的Order类,并定义了一个外键user_id,它引用了users表的id列。我们还定义了一个user关系,用于访问与订单关联的用户。在User类中,我们添加了一个orders关系,用于访问与用户关联的所有订单。

现在,我们可以轻松地查询和管理用户及其订单:

# 创建一个新订单
order = Order(product_name='Laptop', price=1000, user=user)
session.add(order)
session.commit()

# 查询用户的所有订单
orders = session.query(Order).filter(Order.user_id == user.id).all()
for order in orders:
    print(order.product_name, order.price)

# 查询与订单关联的用户
order_user = session.query(User).filter(User.id == order.user_id).first()
print(order_user.name)

通过使用SQLAlchemy,我们可以轻松地管理和查询数据库,而无需编写SQL语句。它为许多不同的数据库系统提供了统一的API,并具有许多其他高级功能,如事务和连接池。了解更多关于SQLAlchemy的信息,请查看官方文档

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
tornado+peewee
前言:需要异步操作MySQL,又要用orm,使用sqlalchemy需要加celery,觉得比较麻烦,选择了peeweeasync开发环境python3.6.8peeweeasync0.5.12peewee2.10.2数据库:MySQL,使用peeweeasync需要依赖库pipinstal
KlausMecial KlausMecial
4年前
Django的安装与简易使用
Django的安装与简易使用1.Django的简介Django是有Python编写的一个开源代码Web应用框架(网址:https://github.com/django/django)。他是基于MTV模式,其本质与MVC是一样的。具体是:1.M代表模型(Model):负责业务对象和数据库的关系映射(ORM)2.T代表模板(Template):负责
CuterCorley CuterCorley
4年前
Python开发 常见异常和解决办法
1.sqlalchemy创建外键关系报错propertyofthatnameexistsonmapperSQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使得在Python中操作MySQL更加简单。在给两个表创建外键关系时可能会报错:bashsqlalchemy.exc.Arg
Stella981 Stella981
3年前
SQLAlchemy
介绍SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在DBAPI之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果,并把获取的结果转为python对象。其中发sql到mysql服务器,从mysql服务器拿结果都是借助其他工具来完成的,例如pymysql.
Easter79 Easter79
3年前
SQLAlchemy连接Oracle
SQLAlchemy是python下的数据库orm映射框架,几乎支持所有常用数据库,很受python开发者的青睐SQLAlChemy依赖cx\_oracle先根据自己的python版本下载oracle库:cx\_oracle(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2F
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Flask从入门到精通之使用Flask
  FlaskSQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。  和其他大多数扩展一样,FlaskSQLAlchemy也使用pip安装
Stella981 Stella981
3年前
SQLAlchemy连接Oracle
SQLAlchemy是python下的数据库orm映射框架,几乎支持所有常用数据库,很受python开发者的青睐SQLAlChemy依赖cx\_oracle先根据自己的python版本下载oracle库:cx\_oracle(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2F
Easter79 Easter79
3年前
SQLAlchemy
介绍SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在DBAPI之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果,并把获取的结果转为python对象。其中发sql到mysql服务器,从mysql服务器拿结果都是借助其他工具来完成的,例如pymysql.