Python SQLAlchemy基本操作和常用技巧
什么是SQLAlchemy
SQLAlchemy是Python中最流行的ORM框架之一。ORM即“对象关系映射”,它提供了一种将数据库和Python对象联系起来的方式,这种方式使得在Python中操作数据库变得更加容易,同时也能够提供更好的抽象化和安全性。
安装SQLAlchemy
要使用SQLAlchemy,首先需要安装它。可以使用pip进行安装:
pip install sqlalchemy
建立连接
使用SQLAlchemy来连接到数据库,需要提供它所使用的数据库类型、用户名、密码、主机和端口。这些信息被组合成一个URL,称为“数据库URI”。
对于SQLite数据库,可以使用以下代码:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///example.db')
这里使用了一个简单的例子,数据库文件名为example.db。如果需要连接到其他类型的数据库(如MySQL、PostgreSQL等),则需要提供相应的URI。
创建表格
在SQLAlchemy中,每个表格都是一个Python类。这意味着我们可以通过创建一个类来定义一个表格。在类中,每个属性都对应表格中的一个列。
以下示例展示了如何创建一个Notes表格:
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Note(Base):
__tablename__ = 'notes'
id = Column(Integer, primary_key=True)
title = Column(String)
text = Column(String)
这里的Note类继承自declarative_base()返回的基类。id、title和text分别声明表格中的三个列。__tablename__变量指定了表格的名称。
添加数据
要向表格中添加数据,需要创建一个Session对象。Session是SQLAlchemy中处理数据库事务的主要接口。
以下代码展示了如何创建Session对象,并添加一条笔记到Notes表格中:
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
note = Note(title='Example Note', text='This is an example note.')
session.add(note)
session.commit()
这里创建了一个Session对象,并将其绑定到上一节中创建的engine。然后,创建了一个Note对象,并使用add()方法将其添加到session中。最后,使用commit()方法提交事务,将笔记添加到数据库中。
查询数据
要从表格中查询数据,可以使用Session对象的query()方法。这个方法接收一个表格作为参数,并返回一个包含所有行的查询对象。
以下代码查询了Notes表格中的所有笔记,并打印了它们的标题和内容:
notes = session.query(Note).all()
for note in notes:
print(note.title)
print(note.text)
query()方法返回Note表格中的所有笔记。用all()方法将结果转换为列表。之后可以遍历该列表,并分别打印每个笔记的标题和内容。
修改数据
要修改一条笔记,可以简单地将其对象重新赋值并提交事务:
note.title = 'New Title'
session.commit()
这里将标题重新赋值为“New Title”,然后调用commit()方法将更改提交到数据库中。任何已经发生的更改都将被提交,包括此次的更改。
删除数据
要删除一条笔记,可以使用Session对象的delete()方法:
session.delete(note)
session.commit()
这里使用delete()方法删除了之前创建的笔记对象,并使用commit()方法将更改提交到数据库中。
结论
这篇文章提供了SQLAlchemy的一些基本操作和常用技巧。SQLAlchemy是一个非常强大的ORM框架,可以帮助Python开发人员更轻松地管理数据库。通过使用Python类来定义表格和操作数据,让数据库的操作更容易理解和维护。
示例
以下是SQLAlchemy在Flask-web应用中的应用示例:
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), nullable=False)
text = db.Column(db.String(120), nullable=False)
@app.route('/notes', methods=['GET', 'POST'])
def notes():
if request.method == 'POST':
note_data = request.get_json()
note = Note(
title=note_data['title'],
text=note_data['text']
)
db.session.add(note)
db.session.commit()
return jsonify({'id': note.id})
else:
notes = Note.query.all()
return jsonify([{
'id': note.id,
'title': note.title,
'text': note.text
} for note in notes])
if __name__ == '__main__':
app.run()
这里创建了一个基本的Flask-web应用,并定义了一个Note类来操作数据库。该应用启动时会创建名为example.db的SQLite数据库,然后启动一个监听端口。当向/notes发送HTTP GET请求时,返回数据库中所有笔记的JSON数组。当向/notes发送HTTP POST请求时,将向数据库添加一条新笔记,并返回新笔记的ID。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好) - Python技术站