Files
conf_bot/database.py
House of vanity ea2be1f23f Init commit
2018-02-04 07:13:09 +03:00

96 lines
2.7 KiB
Python

import datetime as dt
class DataBase:
def __init__(self, basefile, scheme):
import sqlite3
try:
self.conn = sqlite3.connect(basefile, check_same_thread=False)
except:
print('Could not connect to DataBase.')
return None
with open(scheme, 'r') as scheme_sql:
sql = scheme_sql.read()
if self.conn is not None:
try:
cursor = self.conn.cursor()
cursor.executescript(sql)
except:
print('Could not create scheme.')
else:
print("Error! cannot create the database connection.")
print('DB created.')
def execute(self, sql):
cursor = self.conn.cursor()
cursor.execute(sql)
self.conn.commit()
return cursor.fetchall()
def save_word(self, word):
sql = "INSERT OR IGNORE INTO word('word') VALUES ('%s')" % word
self.execute(sql)
sql = "SELECT id FROM word WHERE word = '%s'" % word
return(self.execute(sql)[0][0])
def add_user(self,
username,
user_id,
first_name,
last_name):
date = int(dt.datetime.now().strftime("%s"))
sql = """INSERT OR IGNORE INTO
user('id', 'username', 'first_name', 'last_name', 'date')
VALUES ('%s','%s','%s','%s','%s')""" % (
user_id,
username,
first_name,
last_name,
date
)
self.execute(sql)
def add_conf(self, id, title):
date = int(dt.datetime.now().strftime("%s"))
sql = """INSERT OR IGNORE INTO
conf('id', 'title', 'date')
VALUES ('%s','%s','%s')""" % (
id,
title,
date
)
self.execute(sql)
def add_relation(self, word, user_id, conf_id):
word_id = self.save_word(word)
date = int(dt.datetime.now().strftime("%s"))
sql = """INSERT OR IGNORE INTO
relations('word_id', 'user_id', 'conf_id', 'date')
VALUES ('%s','%s','%s','%s')""" % (
word_id,
user_id,
conf_id,
date
)
self.execute(sql)
def get_top(self, user_id, conf_id, limit=10):
sql= """
SELECT w.word, COUNT(*) as count FROM relations r
LEFT JOIN word w ON w.id = r.word_id
LEFT JOIN `user` u ON u.id = r.user_id
WHERE u.id = '%s' AND
r.conf_id = '%s'
GROUP BY w.word
ORDER BY count DESC
LIMIT %s
""" % (
user_id,
conf_id,
limit
)
result = self.execute(sql)
return(result)
def close(self):
self.conn.close()