11

我希望能够在使用 SQLAlchemy 创建表时自动加载数据。

在 django 中,您有固定装置,可让您在创建表时轻松地使用数据预先填充数据库。我发现这很有用,特别是当你有基本的“查找”表时,例如 product_type、student_type,它们只包含几行,甚至像货币这样的表,它将加载世界上所有的货币,而你不必一遍又一遍地键入它们。你破坏你的模型/课程。

我当前的应用程序没有使用 django。我有 SQLAlchemy。我怎样才能达到同样的目的?我希望应用程序知道数据库是第一次创建的,因此它会用数据填充一些表。

4

2 回答 2

15

我使用事件侦听器在创建表时使用数据预填充数据库。

假设ProductType您的代码中有模型:

from sqlalchemy import event, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class ProductType(Base):
    __tablename__ = 'product_type'
    id = Column(Integer, primary_key=True)
    name = Column(String(100))

首先,您需要定义一个回调函数,该函数将在创建表时执行:

def insert_data(target, connection, **kw):
    connection.execute(target.insert(), {'id': 1, 'name':'spam'}, {'id':2, 'name': 'eggs'})

然后你只需添加事件监听器:

event.listen(ProductType.__table__, 'after_create', insert_data)
于 2018-07-27T21:46:15.413 回答
2

简短的回答是否定的,SQLAlchemy 不提供与 Django 之类的 dumpdata 和 loaddata 相同的功能。

https://github.com/kvesteri/sqlalchemy-fixtures可能对您有用,但工作流程不同。

于 2013-07-04T22:20:22.990 回答