【发布时间】:2017-03-09 13:37:35
【问题描述】:
基本上,我使用 python 库来查询单词的同义词,然后将该单词及其同义词添加到 postgreSQL 表中。如果某些表列是空的,那很好,但我不知道如何将同义词插入数据库,因为我不知道会有多少。
例如,我有一个 6 列的表,1 表示原始单词,5 表示其同义词。对于一个词,我可能会得到 3 个同义词,但对于其他词,我可能会得到全部 5 个。
我设法编写此任务的唯一方法是一组可怕的 if 语句:
for word in textlist:
syns = dictionary.synonym(word)
num = len(syns)
if len(syns) == 5:
for i in syns:
syn1 = i[0]
syn2 = i[1]
syn3 = i[2]
syn4 = i[3]
syn5 = i[4]
等等...然后使用这些变量将同义词插入到数据库表中。
我想到的一种方法是构建另一个单词和同义词列表,然后循环遍历以添加到表格中。但我不知道该怎么做。关于如何进一步推动的任何帮助将是一个很大的帮助。谢谢。
注意:syns 返回一个列表对象。
编辑:
感谢@systemjack,我已将系统更改为有 3 个表格列。 id(这是一个串行主键)、word 和 synos(最初是 syn,但为了确保它不是一些奇怪的关键字而进行了更改)。每个单词应该与一个同义词一起添加到一行中,然后下一行可以是具有不同同义词的同一个单词,依此类推……无论如何,新方法如下:
for word in textlist:
syns = dictionary.synonym(word)
if syns is not None:
for syn in syns:
cursor.execute('INSERT INTO wordsyn (word, "synos") VALUES (%s, %s);', (word, syn))
我现在得到了错误
psycopg2.ProgrammingError: column "synos" of relation "wordsyn" does not exist LINE 1: INSERT INTO wordsyn (word, "synos") VALUES ('&c
我在 synos 周围加上了双引号,试图让它工作,但没有它们也无法工作。任何进一步的帮助将不胜感激。
\d+ wordsyn 输出:
最终编辑:发现问题。没有正确的数据库中的表。我以为 \dt 只显示了您当前数据库中的表,但显然没有。
【问题讨论】:
-
如果可以更改您的数据库结构,那么我们可以轻松找到合适的解决方案。这是一个选择吗?
-
@gipsy 可以。我没有以任何方式特别绘制出来。但这在某种程度上取决于您的建议。
-
如果您为结果表提供一个示例用例,这将有助于找出最佳架构。
-
如果你使用 psql 你会添加
\d+ wordsyn的输出吗? -
我很难过。一切对我来说都是正确的。使用 psql 手动插入是否有效?喜欢:
insert into wordsyn (word, synos) values ('foo', 'bar');
标签: python database postgresql