model.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import sqlite3 as db
  2. import sys
  3. import uuid
  4. connection = None
  5. cursor = None
  6. def connect():
  7. global connection
  8. global cursor
  9. if connection is None or cursor is None:
  10. try:
  11. connection = db.connect('boerse.db')
  12. cursor = connection.cursor()
  13. except db.Error as e:
  14. print("Database error %s:" % e.args[0])
  15. sys.exit(1)
  16. # finally:
  17. # if con is not None:
  18. # con.close()
  19. def setup():
  20. connect()
  21. print('Database setup...')
  22. replace = True
  23. if replace:
  24. cursor.execute("DROP TABLE users")
  25. cursor.execute("DROP TABLE stocks")
  26. cursor.execute("DROP TABLE ownership")
  27. cursor.execute("DROP TABLE sessions")
  28. cursor.execute('''
  29. CREATE TABLE IF NOT EXISTS users(
  30. username VARCHAR(10) UNIQUE NOT NULL,
  31. password VARCHAR(6) NOT NULL)
  32. ''')
  33. cursor.execute('''
  34. CREATE TABLE IF NOT EXISTS stocks(
  35. name VARCHAR(10) UNIQUE NOT NULL,
  36. total_available INTEGER NOT NULL)
  37. ''')
  38. cursor.execute('''
  39. CREATE TABLE IF NOT EXISTS ownership(
  40. user_id INTEGER NOT NULL,
  41. stock_id INTEGER NOT NULL,
  42. amount INTEGER NOT NULL DEFAULT 0,
  43. FOREIGN KEY (user_id) REFERENCES users(rowid),
  44. FOREIGN KEY (stock_id) REFERENCES stocks(rowid),
  45. UNIQUE (user_id, stock_id)
  46. )
  47. ''')
  48. cursor.execute('''
  49. CREATE TABLE IF NOT EXISTS sessions(
  50. user_id INTEGER NOT NULL,
  51. session_id STRING NOT NULL,
  52. FOREIGN KEY (user_id) REFERENCES users(rowid)
  53. )
  54. ''')
  55. def login(username, password):
  56. connect()
  57. cursor.execute('''
  58. SELECT rowid
  59. FROM users
  60. WHERE username = ?
  61. AND password = ?
  62. ''', (username, password))
  63. user_id = cursor.fetchone()
  64. if user_id:
  65. return new_session(user_id)
  66. else:
  67. return None
  68. def register(username, password):
  69. connect()
  70. cursor.execute('''
  71. INSERT INTO users
  72. (username, password)
  73. VALUES (? , ?)
  74. ''', (username, password))
  75. def new_session(user_id):
  76. connect()
  77. session_id = str(uuid.uuid4())
  78. cursor.execute('''
  79. INSERT INTO SESSIONS
  80. (user_id, session_id)
  81. VALUES (? , ?)
  82. ''', (user_id[0], session_id))
  83. return session_id
  84. def drop_old_sessions():
  85. connect()
  86. # TODO: test
  87. cursor.execute('''
  88. DELETE FROM sessions s1
  89. WHERE
  90. (SELECT COUNT(*) as newer
  91. FROM sessions s2
  92. WHERE s1.user_id = s2.user_id
  93. AND s1.rowid < s2.rowid) >= 10
  94. ''')
  95. def user_exists(username):
  96. cursor.execute('''
  97. SELECT rowid
  98. FROM users
  99. WHERE username = ?
  100. ''', (username,))
  101. if cursor.fetchone():
  102. return True
  103. else:
  104. return False