SQLAlchemy笔记

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()
相关推荐
玲娜贝儿--努力学习买大鸡腿版4 分钟前
hot 100 刷题记录(1)
数据结构·python·算法
兮℡檬,22 分钟前
答题卡识别判卷
开发语言·python·计算机视觉
阆遤31 分钟前
利用TRAE对nanobot进行安全分析并优化
python·安全·ai·trae·nanobot
小陈phd40 分钟前
系统架构师学习笔记(二)——计算机体系结构之指令系统
笔记·学习·系统架构
雕刻刀1 小时前
ERROR: Failed to build ‘natten‘ when getting requirements to build wheel
开发语言·python
何双新1 小时前
Odoo 技术演进全解析:从 Widget 到 Owl,从 Old API 到声明式 ORM
python
宵时待雨1 小时前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法
山川行1 小时前
关于《项目C语言》专栏的总结
c语言·开发语言·数据结构·vscode·python·算法·visual studio code
星辰徐哥2 小时前
C语言游戏开发:Pygame、SDL、OpenGL深度解析
c语言·python·pygame
左左右右左右摇晃2 小时前
JDK 1.7 ConcurrentHashMap——分段锁
java·开发语言·笔记