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()
相关推荐
时代的凡人11 小时前
0208晨间笔记
笔记
YJlio11 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
l1t11 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
今天只学一颗糖11 小时前
1、《深入理解计算机系统》--计算机系统介绍
linux·笔记·学习·系统架构
山塘小鱼儿12 小时前
本地Ollama+Agent+LangGraph+LangSmith运行
python·langchain·ollama·langgraph·langsimth
码说AI12 小时前
python快速绘制走势图对比曲线
开发语言·python
wait_luky13 小时前
python作业3
开发语言·python
Python大数据分析@14 小时前
tkinter可以做出多复杂的界面?
python·microsoft
大黄说说14 小时前
新手选语言不再纠结:Java、Python、Go、JavaScript 四大热门语言全景对比与学习路线建议
java·python·golang