1

我想使用小马 orm 测试表是否为空。

起初我连接到数据库并说生成映射。我在这里使用“名称”表作为示例并连接到 postgres 数据库

from pony.orm import *

class Names(db.Entity):
    name = Required(str)


@db_session
def populate_names(name_list):
    for name_element in name_list:
        db.insert("Names", name=name_element)


@db_session
def test_empty():
    temp = False
    # if Names is empty, set temp = True
    if Names ... :
        temp = True

    return temp


if __name__ == "__main__":
    characters = ['James', 'Elisabeth', 'Paul', ...]

    db = Database()
    db.bind(provider='postgres', user='', password='', host='', database='')

    # generate_mappings already creates empty tables
    db.generate_mapping(create_tables=True)

    empty = test_empty()

    if empty is True:
        populate_names(characters)

我在 Pony Docs 中找不到任何关于检查表是否为空的内容。

if Names is None:

上面的行给了我“错误”,因为该表已经存在。有谁知道解决方案?

4

1 回答 1

3

最简单的方法是写:

with db_session:
    if not Names.select().exists():
        populate_names()

或者,您可以将 test 放在里面populate_my_entity()

@db_session
def populate_names(name_list):
    if Names.select().exists():
        return
    for name_element in name_list:
        db.insert("Names", name=name_element)
于 2018-08-03T11:37:08.170 回答