SQLAlchemy
pip install sqlalchemy
pip install mysqlclient
pip show sqlalchemy
Name: SQLAlchemy
Version: 2.0.46
连接数据库
python
import sqlalchemy
engine = sqlalchemy.create_engine("mysql://root:123456@192.168.200.130/test_db")
conn = engine.connect()
print("conn: \n{}".format(conn))
"""
conn:
<sqlalchemy.engine.base.Connection object at 0x0000019F03B724A0>
"""
查询表
python
import sqlalchemy
engine = sqlalchemy.create_engine("mysql://root:123456@192.168.200.130/test_db")
conn = engine.connect()
query = sqlalchemy.text("SELECT * FROM tb_students")
result_sets = conn.execute(query)
for row in result_sets:
print("row: \n{}".format(row))
"""
row:
(1, 'John Smith', 'Male', '13800138001')
row:
(2, 'Jane Doe', 'Female', '13800138002')
row:
...
row:
(9, 'Matthew Taylor', 'Male', '13800138009')
row:
(10, 'Ashley Anderson', 'Female', '13800138010')
"""
conn.close()
engine.dispose()
创建表
python
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column
)
engine = create_engine("mysql://root:123456@192.168.200.130/test_db", echo=True) # echo表示输出操作过程回显
meta_data = MetaData()
tb_new1 = Table(
"tb_new1", # 表名
meta_data,
Column("id", sqlalchemy.Integer, primary_key=True), # id字段,主键
Column("name", sqlalchemy.String(16), unique=True, nullable=False), # name字段,16位长,唯一非空
Column("birthday", sqlalchemy.Date, nullable=True), # birthday字段,日期类型,可空
)
meta_data.create_all(engine)
"""
2026-02-09 18:24:04,510 INFO sqlalchemy.engine.Engine SELECT DATABASE()
2026-02-09 18:24:04,511 INFO sqlalchemy.engine.Engine [raw sql] ()
2026-02-09 18:24:04,512 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
2026-02-09 18:24:04,513 INFO sqlalchemy.engine.Engine [raw sql] ()
2026-02-09 18:24:04,514 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
2026-02-09 18:24:04,514 INFO sqlalchemy.engine.Engine [raw sql] ()
2026-02-09 18:24:04,515 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2026-02-09 18:24:04,516 INFO sqlalchemy.engine.Engine DESCRIBE `test_db`.`tb_new1`
2026-02-09 18:24:04,516 INFO sqlalchemy.engine.Engine [raw sql] ()
2026-02-09 18:24:04,519 INFO sqlalchemy.engine.Engine
CREATE TABLE tb_new1 (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(16) NOT NULL,
birthday DATE,
PRIMARY KEY (id),
UNIQUE (name)
)
2026-02-09 18:24:04,520 INFO sqlalchemy.engine.Engine [no key 0.00082s] ()
2026-02-09 18:24:04,533 INFO sqlalchemy.engine.Engine COMMIT
"""
conn.close()
engine.dispose()
增加一条记录
python
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column
)
engine = create_engine("mysql://root:123456@192.168.200.130/test_db", echo=True) # echo表示输出操作过程回显
meta_data = MetaData()
tb_new1 = Table(
"tb_new1", # 表名
meta_data,
Column("id"), # id字段,主键
Column("name"), # name字段,16位长,唯一非空
Column("birthday"), # birthday字段,日期类型,可空
)
tb_new1_insert = tb_new1.insert()
print("tb_new1_insert: \n{}".format(tb_new1_insert))
"""
tb_new1_insert:
INSERT INTO tb_new1 (id, name, birthday) VALUES (:id, :name, :birthday)
"""
insert_tom = tb_new1_insert.values(name="李四", birthday="2000-10-11")
print("insert_tom: \n{}".format(insert_tom))
"""
insert_tom:
INSERT INTO tb_new1 (name, birthday) VALUES (:name, :birthday)
"""
with engine.connect() as conn:
result = conn.execute(insert_tom)
print("result.inserted_primary_key: \n{}".format(result.inserted_primary_key))
"""
result.inserted_primary_key:
(1,)
"""
conn.commit()
"""
2026-02-09 18:32:57,771 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2026-02-09 18:32:57,773 INFO sqlalchemy.engine.Engine INSERT INTO tb_new1 (name, birthday) VALUES (%s, %s)
2026-02-09 18:32:57,773 INFO sqlalchemy.engine.Engine [generated in 0.00094s] ('张三', '2000-10-10')
2026-02-09 18:32:57,775 INFO sqlalchemy.engine.Engine COMMIT
"""
conn.close()
engine.dispose()
增加多条记录
python
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column
)
engine = create_engine("mysql://root:123456@192.168.200.130/test_db", echo=True) # echo表示输出操作过程回显
meta_data = MetaData()
tb_new1 = Table(
"tb_new1", # 表名
meta_data,
Column("id"), # id字段,主键
Column("name"), # name字段,16位长,唯一非空
Column("birthday"), # birthday字段,日期类型,可空
)
tb_new1_insert = tb_new1.insert()
with engine.connect() as conn:
conn.execute(tb_new1_insert, [
{"name": "user1", "birthday": "2000-1-1"},
{"name": "user2", "birthday": "2000-1-2"},
{"name": "user3", "birthday": None}
])
conn.commit()
"""
2026-02-09 18:44:03,088 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2026-02-09 18:44:03,089 INFO sqlalchemy.engine.Engine INSERT INTO tb_new1 (name, birthday) VALUES (%s, %s)
2026-02-09 18:44:03,089 INFO sqlalchemy.engine.Engine [cached since 73.79s ago] [('user1', '2000-1-1'), ('user2', '2000-1-2'), ('user3', None)]
2026-02-09 18:44:03,090 INFO sqlalchemy.engine.Engine COMMIT
"""
conn.close()
engine.dispose()
查询所有记录
python
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column
)
engine = create_engine("mysql://root:123456@192.168.200.130/test_db") # echo表示输出操作过程回显
meta_data = MetaData()
tb_new1 = Table(
"tb_new1", # 表名
meta_data,
Column("id"), # id字段,主键
Column("name"), # name字段,16位长,唯一非空
Column("birthday"), # birthday字段,日期类型,可空
)
with engine.connect() as conn:
query = tb_new1.select()
result_set = conn.execute(query)
# 循环提取
# for row in result_set:
# # 第一种方式
# print("方法一: \n{}".format(row[0]))
# # 第二种方式
# print("方法二: \n{}".format(row.name))
# 使用提取函数
# # 第三种方式
# result = result_set.fetchall()
# print("方法三: \n{}".format(result))
row = result_set.fetchone()
print("方法四: \n{}".format(row))
"""
方法一:
1
方法二:
...
方法一:
8
方法二:
user3
方法三:
[(1, '张三', datetime.date(2000, 10, 10)), (2, '李四', datetime.date(2000, 10, 11)), (6, 'user1', datetime.date(2000, 1, 1)), (7, 'user2', datetime.date(2000, 1, 2)), (8, 'user3', None)]
方法四:
(1, '张三', datetime.date(2000, 10, 10))
"""
conn.close()
engine.dispose()
条件查询
python
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column
)
engine = create_engine("mysql://root:123456@192.168.200.130/test_db") # echo表示输出操作过程回显
meta_data = MetaData()
tb_new1 = Table(
"tb_new1", # 表名
meta_data,
Column("id"), # id字段,主键
Column("name"), # name字段,16位长,唯一非空
Column("birthday"), # birthday字段,日期类型,可空
)
with engine.connect() as conn:
query = tb_new1.select().where(tb_new1.c.birthday > "2000-9-1")
result_set = conn.execute(query)
result = result_set.fetchall()
print("result: \n{}".format(result))
"""
result:
[(1, '张三', datetime.date(2000, 10, 10)), (2, '李四', datetime.date(2000, 10, 11))]
"""
with engine.connect() as conn:
query = tb_new1.select().where(tb_new1.c.birthday > "2000-9-1").where(tb_new1.c.id < 2)
result_set = conn.execute(query)
result = result_set.fetchall()
print("result: \n{}".format(result))
"""
result:
[(1, '张三', datetime.date(2000, 10, 10))]
"""
from sqlalchemy.sql import and_, or_
with engine.connect() as conn:
query = tb_new1.select().where(
or_( # 或条件
tb_new1.c.name == "user3",
and_( # 与条件
tb_new1.c.birthday > "2000-9-1",
tb_new1.c.id < 2
)
)
)
result_set = conn.execute(query)
result = result_set.fetchall()
print("result: \n{}".format(result))
"""
result:
[(1, '张三', datetime.date(2000, 10, 10)), (8, 'user3', None)]
"""
conn.close()
engine.dispose()