使用notion-py(Notion API)填充数据库multi-select多选类型列的方法
问题原因
你遇到的Not allowed to edit column: schema报错,是因为你当前使用的token_v2对应的Notion账号没有编辑该数据库结构的权限。你使用的add_new_multi_select_value方法本质是修改数据库的schema来新增标签选项,自然会被权限规则拦截。
另外你之前的思路有偏差:给multi-select列填充数据不需要修改数据库schema,只有新增标签选项的时候才需要改schema。
解决方法
方案一:提前预定义标签(推荐)
这种方案不需要修改数据库schema,不会触发权限问题,稳定性最高:
- 提前打开你的Notion数据库,手动在Теги列的multi-select配置里把所有会用到的标签选项都加好
- 确认Теги列对应的Python字段名:创建行后加一行代码打印
print(row.get_all_properties()),从输出的字典里找到名称为“Теги”对应的键名,比如大概率是tegi或者tags
修正后的写入代码如下:
def make_notion_row(): collection_view = client.get_collection_view(list_url[temporary_category]) row = collection_view.collection.add_row() # 创建新行 row.ssylka = temporary_link # 填充链接字段 row.nazvanie_zametki = temporary_name # 填充名称字段 if temporary_category == 0: row.stil = temporary_subcategory # 填充子分类字段 # 分割标签并去掉前后空格 tags = [tag.strip() for tag in temporary_tag.split(',')] # 直接给multi-select字段赋值标签列表即可,这里把tegi替换为你实际查到的字段名 row.tegi = tags else: row.kategoria = temporary_subcategory
方案二:需要动态新增标签
如果你确实需要运行时动态添加新的标签选项,需要先做两个操作:
- 打开Notion数据库的共享设置,给你token_v2对应的账号授予「编辑」权限(注意不是只读权限)
- 修正
add_new_multi_select_value方法里的变量错误:你方法里最后一行的collection没有定义,要替换为collection_view.collection
另外注意notion-py已经停止维护多年,对Notion新的接口兼容性很差,如果动态新增标签还是报错,建议换成Notion官方提供的Python SDK,使用内部集成token来调用接口,权限配置更清晰。
内容的提问来源于stack exchange,提问作者makemono_zeroke
相关产品推荐
相关产品推荐

