Syntrex commited on
Commit
9fcd1ff
·
verified ·
1 Parent(s): 8f91ea4

Rename database/db.txt to database/db.py

Browse files
Files changed (2) hide show
  1. database/db.py +163 -0
  2. database/db.txt +0 -0
database/db.py ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Iterable, Mapping, Any
5
+
6
+ import duckdb
7
+ import pandas as pd
8
+
9
+ from config.settings import DUCKDB_PATH
10
+
11
+
12
+ def get_connection() -> duckdb.DuckDBPyConnection:
13
+ Path("data").mkdir(parents=True, exist_ok=True)
14
+ conn = duckdb.connect(DUCKDB_PATH)
15
+ initialize_schema(conn)
16
+ return conn
17
+
18
+
19
+ def initialize_schema(conn: duckdb.DuckDBPyConnection) -> None:
20
+ conn.execute(
21
+ """
22
+ CREATE TABLE IF NOT EXISTS bets (
23
+ bet_id BIGINT,
24
+ created_at TIMESTAMP,
25
+ sportsbook TEXT,
26
+ market TEXT,
27
+ selection TEXT,
28
+ odds INTEGER,
29
+ stake DOUBLE,
30
+ result TEXT,
31
+ profit DOUBLE,
32
+ game_id TEXT,
33
+ notes TEXT
34
+ );
35
+ """
36
+ )
37
+
38
+ conn.execute(
39
+ """
40
+ CREATE TABLE IF NOT EXISTS cached_schedule (
41
+ fetched_at TIMESTAMP,
42
+ game_id TEXT,
43
+ game_date TIMESTAMP,
44
+ status TEXT,
45
+ away_team TEXT,
46
+ home_team TEXT,
47
+ away_score INTEGER,
48
+ home_score INTEGER,
49
+ venue TEXT
50
+ );
51
+ """
52
+ )
53
+
54
+ conn.execute(
55
+ """
56
+ CREATE TABLE IF NOT EXISTS cached_odds (
57
+ fetched_at TIMESTAMP,
58
+ event_id TEXT,
59
+ commence_time TIMESTAMP,
60
+ home_team TEXT,
61
+ away_team TEXT,
62
+ sportsbook TEXT,
63
+ market_key TEXT,
64
+ outcome_name TEXT,
65
+ price INTEGER,
66
+ point DOUBLE
67
+ );
68
+ """
69
+ )
70
+
71
+ conn.execute(
72
+ """
73
+ CREATE TABLE IF NOT EXISTS cached_weather (
74
+ fetched_at TIMESTAMP,
75
+ venue_key TEXT,
76
+ location_name TEXT,
77
+ temperature_f DOUBLE,
78
+ humidity INTEGER,
79
+ wind_speed_mph DOUBLE,
80
+ wind_deg INTEGER,
81
+ description TEXT
82
+ );
83
+ """
84
+ )
85
+
86
+
87
+ def upsert_dataframe(
88
+ conn: duckdb.DuckDBPyConnection,
89
+ table_name: str,
90
+ df: pd.DataFrame,
91
+ replace: bool = True,
92
+ ) -> None:
93
+ if df.empty:
94
+ return
95
+
96
+ temp_name = f"tmp_{table_name}"
97
+ conn.register(temp_name, df)
98
+ if replace:
99
+ conn.execute(f"DELETE FROM {table_name}")
100
+ conn.execute(f"INSERT INTO {table_name} SELECT * FROM {temp_name}")
101
+ conn.unregister(temp_name)
102
+
103
+
104
+ def read_table(conn: duckdb.DuckDBPyConnection, table_name: str) -> pd.DataFrame:
105
+ return conn.execute(f"SELECT * FROM {table_name}").df()
106
+
107
+
108
+ def insert_bet(
109
+ conn: duckdb.DuckDBPyConnection,
110
+ bet_id: int,
111
+ created_at: str,
112
+ sportsbook: str,
113
+ market: str,
114
+ selection: str,
115
+ odds: int,
116
+ stake: float,
117
+ result: str,
118
+ profit: float,
119
+ game_id: str,
120
+ notes: str,
121
+ ) -> None:
122
+ conn.execute(
123
+ """
124
+ INSERT INTO bets (
125
+ bet_id, created_at, sportsbook, market, selection, odds, stake,
126
+ result, profit, game_id, notes
127
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
128
+ """,
129
+ [
130
+ bet_id,
131
+ created_at,
132
+ sportsbook,
133
+ market,
134
+ selection,
135
+ odds,
136
+ stake,
137
+ result,
138
+ profit,
139
+ game_id,
140
+ notes,
141
+ ],
142
+ )
143
+
144
+
145
+ def next_bet_id(conn: duckdb.DuckDBPyConnection) -> int:
146
+ value = conn.execute("SELECT COALESCE(MAX(bet_id), 0) + 1 FROM bets").fetchone()[0]
147
+ return int(value)
148
+
149
+
150
+ def update_bet_result(
151
+ conn: duckdb.DuckDBPyConnection,
152
+ bet_id: int,
153
+ result: str,
154
+ profit: float,
155
+ ) -> None:
156
+ conn.execute(
157
+ """
158
+ UPDATE bets
159
+ SET result = ?, profit = ?
160
+ WHERE bet_id = ?
161
+ """,
162
+ [result, profit, bet_id],
163
+ )
database/db.txt DELETED
File without changes