SQLAlchemy 的 create_engine
函数用于创建一个数据库引擎,而连接对象Connection 则用于实际执行数据库操作。
-
create_engine:
create_engine
是 SQLAlchemy 中用于创建数据库引擎的函数。它接受一个数据库连接字符串作为参数,并返回一个 Engine 实例,该实例代表与数据库的连接。数据库连接字符串通常包括数据库类型、用户名、密码、主机地址、端口号以及数据库名等信息。例如,针对 SQLite 数据库,数据库连接字符串可能是sqlite:///example.db
,其中example.db
是 SQLite 数据库文件的路径。engine = create_engine('sqlite:///example.db')
使用
create_engine
创建了一个 SQLite 数据库引擎,并将其赋值给变量engine
。 -
连接对象(Connection object):
连接对象表示与数据库的实际连接,并提供了执行数据库操作的方法。可以通过数据库引擎的
connect()
方法来获取连接对象。一旦获取了连接对象,就可以使用它来执行各种数据库操作,如查询、插入、更新、删除等。with engine.connect() as connection: # 在这里执行数据库操作 connection.execute("INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2')")
使用
engine.connect()
获取了一个连接对象,并在with
语句中使用它来执行插入操作。
通常情况下,使用with
语句来管理连接,确保在退出代码块时自动关闭连接
总的来说,create_engine
函数用于创建数据库引擎,而连接对象则用于实际执行数据库操作。连接对象是通过数据库引擎的 connect()
方法获取的,并且是在连接对象上调用 execute()
方法来执行数据库操作。
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# 创建数据库引擎
engine = create_engine('sqlite:///connectionexample.db')
# 定义元数据
metadata = MetaData()
# 定义数据表
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
Column('email', String)
)
# 创建数据表
metadata.create_all(engine)
# 插入数据
def insert_data(connection):
connection.execute(users.insert(), [
{'name': 'Alice', 'age': 30, 'email': 'alice@example.com'},
{'name': 'Bob', 'age': 25, 'email': 'bob@example.com'}
])
# 查询数据
def select_data(connection):
result = connection.execute(users.select())
for row in result:
print(row)
# 更新数据
def update_data(connection):
connection.execute(users.update().where(users.c.name == 'Alice').values(age=35))
# 删除数据
def delete_data(connection):
connection.execute(users.delete().where(users.c.name == 'Bob'))
# 使用连接对象执行数据库操作
with engine.connect() as connection:
# 插入数据
insert_data(connection)
# 查询数据
print("Data after insertion:")
select_data(connection)
# 更新数据
update_data(connection)
print("\nData after updating:")
select_data(connection)
# 删除数据
delete_data(connection)
print("\nData after deletion:")
select_data(connection)