· 8 years ago · Mar 29, 2018, 07:56 PM
1import sqlite3
2
3def sql(f):
4 def insert(cursor, table, values):
5 query = f'INSERT OR REPLACE INTO {table} VALUES ({values})'
6 return lambda items, query=query: cursor.execute(query, items)
7
8 def select(cursor):
9 def wrap(cursor):
10 cursor.execute('SELECT * FROM test')
11 return cursor.fetchall()
12 return lambda: wrap(cursor)
13
14 def init():
15 connection = sqlite3.connect('test.db')
16 cursor = connection.cursor()
17 return (connection, cursor)
18
19 def create(c, table, values):
20 query = 'CREATE TABLE IF NOT EXISTS'
21 return c.execute(f'{query} {table} {values}')
22
23 def wrap(*args, **kwargs):
24 if 'cursor' in kwargs:
25 return f(*args, **kargs)
26
27 connection, cursor = init()
28 create(cursor, 'test', '(x TEXT UNIQUE, y TEXT UNIQUE)')
29
30 kwargs['insert'] = insert(cursor, 'test', '?,?')
31 kwargs['select'] = select(cursor)
32
33 handler = f(*args, **kwargs)
34
35 connection.commit()
36 connection.close()
37
38 return handler
39 return wrap
40
41@sql
42def insert(items, **kwargs):
43 kwargs['insert'](items)
44
45@sql
46def select(**kwargs):
47 return kwargs['select']()
48
49@sql
50def insert_and_select(data, **kwargs):
51 insert(data)
52 return select(**kwargs)
53
54def main():
55 print(insert_and_select(tuple(['one', 'two'])))
56
57main()