Python MySQL选择:通过Unicode查找所有语言

Python MySQL选择:通过Unicode查找所有语言,python,mysql,select,Python,Mysql,Select,我正在寻找一个相当棘手(对我来说)的SELECT语句,它将从语言定义数据库计算字体文件的所有支持语言 字体的unicodes存储在列表'unicodes'中(我们使用Python)。 语言数据库有两列,一列为语言名称,另一列为整数形式的unicode,如下所示: (language) - (unicode) English - 97 #a English - 98 #b English - 99 #c German - 97 #a German - 98 #b German - 99 #c Ge

我正在寻找一个相当棘手(对我来说)的SELECT语句,它将从语言定义数据库计算字体文件的所有支持语言

字体的unicodes存储在列表'unicodes'中(我们使用Python)。 语言数据库有两列,一列为语言名称,另一列为整数形式的unicode,如下所示:

(language) - (unicode)
English - 97 #a
English - 98 #b
English - 99 #c
German - 97 #a
German - 98 #b
German - 99 #c
German - 228 #ä
我当前的SQL语句如下所示:

"SELECT DISTINCT language FROM languagedefinitions WHERE unicode = %s;" % (' OR unicode = '.join(map(str, unicodes())))
问题是,这将输出字体部分支持的所有语言。具有Unicodes97-99的字体将同时输出英语和德语,而该字体中缺少德语所需的unicode(228)

相反,我需要的只是字体完全支持的那些语言,例如,字体中存在一种语言的所有Unicode。 如果字体中缺少一种语言的一个或多个Unicode(在本例中为228),则德语不应出现


谢谢大家!

您可以使用子查询。使用子查询,我们选择语言​​其中有未包含在字体中的Unicode:

SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99)
然后我们选择所有的语言​​未在子查询中选择的。因此,完整查询将如下所示:

SELECT DISTINCT language FROM languagedefinitions WHERE language NOT IN (
    SELECT DISTINCT language FROM languagedefinitions WHERE unicode NOT IN (97,98,99);
);

NorthCat的纯SQL子查询解决方案可以工作,但比使用集合(0.0004s)的Python迭代实现要长得多(0.05秒):

from sets import Set
# First step, get all languages
languagenames = web.db.dbexec("SELECT DISTINCT language FROM languagedefinitions;")
# Second step, get all unicodes from one language and compare them against the font using sets.Set()
supportedLanguages = []
for languagename in languagenames:
    unicodesPerLanguage = web.db.dbexec("SELECT unicode FROM languagedefinitions WHERE language = '%s';" % (languagename))
    if Set(x[0] for x in unicodesPerLanguage).issubset(Set(unicodesInFont)):
        supportedLanguages.append(languagename[0])