SQLalchemy —— 插入数据

插入数据

要往表里插数据,先创建一个 insert 对象

ins = user_table.insert()

打印这个 insert 对象,可以看到它所对应的 SQL 语句:

>>> print(ins )
INSERT INTO user (id, name, fullname) VALUES (?, ?, ?)

如果 MetaData 创建时没有绑定引擎,那么输出会略有不同:

INSERT INTO "user" (id, name, fullname) VALUES (:id, :name, :fullname)

现在我们添加上要写入的数据

ins = ins.values(name='xiaoming', fullname='Li XiaoMing')

打印下:

>>> print(ins )
INSERT INTO user (name, fullname) VALUES (?, ?)

现在 id 字段已经没有了。

执行语句

我们一直在说的引擎,可以理解成一个数据库连接对象的仓库,通过连接对象可以往数据库发送具体的 SQL 语句。调用引擎的 connect() 方法可以获取一个连接:

conn = engine.connect()

现在把前面的Insert对象丢给它来执行:

result = conn.execute(ins)

执行完后数据就写入相关的表中了。

下面是一个完整的例子:

from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table, Column, Date, Integer, String, ForeignKey

# 连接数据库
engine = create_engine('sqlite:///school.db', echo=False)
# 绑定引擎
metadata = MetaData(engine)

# 连接数据表
user_table = Table('user', metadata, autoload=True)
address_table = Table('address', metadata, autoload=True)

# 创建 insert 对象
ins = user_table.insert()
# 绑定要插入的数据
ins = ins.values(name='xiaoming', fullname='Li XiaoMing')

# 连接引擎
conn = engine.connect()
# 执行语句
result = conn.execute(ins)
执行多条语句

SQLalchemy 允许我们把参数通过 execute() 方法传进去:

ins = user_table.insert()
conn.execute(ins, name='xiaoming', fullname='Li XiaoMing')

完整例子:

from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table, Column, Date, Integer, String, ForeignKey

# 连接数据库
engine = create_engine('sqlite:///school.db', echo=False)
# 绑定引擎
metadata = MetaData(engine)

# 连接数据表
user_table = Table('user', metadata, autoload=True)
address_table = Table('address', metadata, autoload=True)

# 连接引擎
conn = engine.connect()

# 创建 insert 对象
ins = user_table.insert()

# 传递参数并执行语句
conn.execute(ins, name='xiaoming', fullname='Li XiaoMing')

一次插入多条记录也很简单,只要传一个字典列表(每个字典的键必须一致)给execute()即可:

conn.execute(address_table.insert(), [
    { 'user_id': 1, 'email': '[email protected]' },
    { 'user_id': 1, 'email': '[email protected]' },
    ])

完整例子:

from sqlalchemy import create_engine, MetaData
from sqlalchemy import Table, Column, Date, Integer, String, ForeignKey

# 连接数据库
engine = create_engine('sqlite:///school.db', echo=False)
# 绑定引擎
metadata = MetaData(engine)

# 连接数据表
user_table = Table('user', metadata, autoload=True)
address_table = Table('address', metadata, autoload=True)

# 连接引擎
conn = engine.connect()

# 执行多条语句
conn.execute(address_table.insert(), [
    { 'user_id': 1, 'email': '[email protected]' },
    { 'user_id': 1, 'email': '[email protected]' },
    ])

你可能感兴趣的:(SQLalchemy —— 插入数据)