File size: 3,456 Bytes
5a2b2d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#%%

# create_engine: This function creates a new SQLAlchemy “engine,” 
# which is an interface to the database. It acts as the core connection to 
# your database and manages the communication between your Python code and the database.
from sqlalchemy import create_engine

# declarative_base: This function is used to create a base class for our ORM models. 
# All of your database table classes (models) will inherit from this base class. 
# This base class also ties each model to a corresponding table in the database.
from sqlalchemy.ext.declarative import declarative_base

# sessionmaker: This is a factory function for creating new Session objects. 
# Sessions are used to manage the operations (queries, updates, etc.) on 
# the database in a transaction-safe way. They provide an interface for 
# interacting with the database.
from sqlalchemy.orm import sessionmaker

# This line defines the URL for your database connection. 
# SQLAlchemy uses this URL to determine what type of database you’re 
# connecting to, and where it’s located.
# sqlite:// tells SQLAlchemy that you are using SQLite as the database engine.
# ./test.db specifies the relative path to the database file (test.db) in the 
# current directory (./). SQLite stores the entire database as a single file on disk
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

# This line creates the database engine by passing the SQLALCHEMY_DATABASE_URL to the 
# create_engine function. The engine is responsible for managing the connection to the database.
# connect_args={"check_same_thread": False}: This argument is specific to SQLite. By default, 
# SQLite does not allow multiple threads to interact with the database. The check_same_thread 
# argument disables this check, allowing the engine to be used in a multi-threaded environment. 
# This is necessary for many web applications (like FastAPI) that might have multiple requests 
# hitting the database simultaneously.
engine = create_engine(
    SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
)

# you create a factory for database sessions. SessionLocal will be used to create individual sessions, 
# which are needed to interact with the database (querying data, inserting/updating records, etc.).
# 1. autocommit=False: This means that changes (inserts, updates, deletes) to the database will not be 
# committed automatically. You will need to explicitly commit transactions using session.commit(). 
# This gives you better control over when data is saved.
# 2. autoflush=False: This disables automatic flushing. Flushing is the process of sending any pending 
# changes to the database before executing queries. With autoflush=False, the session will not 
# automatically send updates to the database unless you explicitly tell it to by calling flush() or commit(). 
# It prevents unexpected database updates.
# 3. bind=engine: This ties the session to the database engine. Any session created with SessionLocal() 
# will use the engine to communicate with the database.
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# This line creates a base class for all of your ORM models (i.e., classes that represent database tables). 
# Each model (class) will inherit from Base, and SQLAlchemy will use this base class to generate the 
# necessary SQL statements to create tables and handle CRUD operations (Create, Read, Update, Delete).
Base = declarative_base()
# %%