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()
相关推荐
树獭非懒9 小时前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
唐叔在学习12 小时前
就算没有服务器,我照样能够同步数据
后端·python·程序员
曲幽14 小时前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama
Flittly14 小时前
【从零手写 AI Agent:learn-claude-code 项目实战笔记】(1)The Agent Loop (智能体循环)
python·agent
vivo互联网技术16 小时前
ICLR2026 | 视频虚化新突破!Any-to-Bokeh 一键生成电影感连贯效果
人工智能·python·深度学习
敏编程17 小时前
一天一个Python库:virtualenv - 隔离你的Python环境,保持项目整洁
python
喝茶与编码19 小时前
Python异步并发控制:asyncio.gather 与 Semaphore 协同设计解析
后端·python
zone773919 小时前
003:RAG 入门-LangChain 读取图片数据
后端·python·面试
用户83562907805119 小时前
在 PowerPoint 中用 Python 添加和定制形状的完整教程
后端·python