我刚刚发现了SQLite的JSON1,并发现它将是我在Android应用程序中处理的许多问题的完美答案(我使用的是SQLCipher,它提供了支持JSON1的SQLite版本)。 SQLite documentation for JSON1非常好,但不包括运行子查询等问题 - 这在任何情况下都超出了我的SQL能力。
这是我的测试用例
我首先创建表
CREATE TABLE users(name TEXT,phone TEXT)
然后我添加两行
INSERT INTO users (name,phone) VALUES('Joe Bloggs','{"mobile":
"123456789","land":"987654321"}');
INSERT INTO users (name,phone) VALUES('Jane Bloggs','{"mobile":
"234567890","land":"098765432"}');
然后我可以查询返回,比如说只返回手机号码
SELECT json_extract(users.phone, '$.mobile') FROM users;
将返回结果[“123456789”,“234567890”]
但是假设我想获取移动电话号码为234567890的用户的固定电话号码和名称。我如何使用可用的json_*
原语函数编写子查询,以便简单地返回结果[ “Jane Bloggs”,“234567890”]?
答案 0 :(得分:2)
我正在考虑关闭这个问题但是觉得离开它并且答案对其他人更有用。 SQLite JSON1文档实际上解释了如何做这些事情虽然解释不是很明显。在这个实例中要发出的SQL将是
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as tkFont
class App(ttk.Frame):
def __init__(self, parent):
ttk.Frame.__init__(self, parent)
self.parent = parent
fontFamilies = tkFont.families()
print('tkFont.families() = ', fontFamilies)
testfont = 'URW Gothic L' #change string to the font you want to use
for font in fontFamilies:
if testfont == font:
print('\n{} in tkFont.families()'.format(testfont))
break
self._defaultFont=tkFont.Font(family=testfont, size='11',
weight='normal')
self.setFont()
def setFont(self):
"""Customise Font styles"""
self.Font = self._defaultFont.copy()
self.FontBold = self._defaultFont.copy()
self.FontBold.config(weight='bold')
print('\n_defaultFont.configure = ', self._defaultFont.configure())
print('_defaultFont.actual = ', self._defaultFont.actual())
print('Font.configure = ', self.Font.configure())
print('Font.actual = ', self.Font.actual())
print('FontBold.configure = ', self.FontBold.configure())
print('FontBold.actual = ', self.FontBold.actual())
if __name__ == '__main__':
root = tk.Tk()
root.title('Test')
root.geometry('200x100')
app = App(root)
app.pack(expand=1, fill='both')
root.mainloop()