---
tags: 109-1, lecture
---
# Database
CRUD
## SQL
[SQL tutorial](https://www.w3schools.com/sql/default.asp)
[Python sqlite](https://docs.python.org/3/library/sqlite3.html)
### prerequisite
```shell
$ pip install pandas tabulate
```
`print_db.py`
```python=
import sqlite3
import pandas as pd
from tabulate import tabulate
DB_NAME = "example.db"
db = sqlite3.connect(DB_NAME)
cursor = db.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = cursor.fetchall()
for table_name in tables:
table_name = table_name[0]
if table_name.startswith("sqlite"):
continue
table = pd.read_sql_query("SELECT * from %s" % table_name, db)
header = table.columns.to_list()
print()
print(f"Table: {table_name}")
print()
print(tabulate(table, header, tablefmt="grid"))
print()
print("=" * 40)
cursor.close()
db.close()
```
`reset_db.py`
```python=
import os
import sqlite3
DB_NAME = "example.db"
if os.path.exists(DB_NAME):
os.remove(DB_NAME)
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute('''CREATE TABLE accounts
(id integer primary key autoincrement, username text, password text)
''')
c.execute('''CREATE TABLE messages
(id integer primary key autoincrement,
user_from text,
user_to text,
message text)
''')
conn.commit()
conn.close()
```
`insert.py`
```python=
import sqlite3
DB_NAME = "example.db"
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
# insert single row
c.execute("INSERT INTO accounts VALUES (?,?,?)",
(None, "admin", "admin_password"))
# insert multiple rows
messages = [
(None, "Alice", "Bob", "Hello"),
(None, "Admin", "Bob", "You are banned!"),
(None, "Alice", "Bob", "Ah!"),
]
c.executemany("INSERT INTO messages VALUES (?,?,?,?)", messages)
conn.commit()
conn.close()
```
`execute.py`
```python=
import sqlite3
DB_NAME = "example.db"
conn = sqlite3.connect(DB_NAME)
c = conn.cursor()
c.execute("SELECT * FROM messages")
print(c.fetchall())
conn.commit()
conn.close()
```
#### SQL injection
```
' OR 1=1 --
```
## Mongo
[Official Documentation](https://docs.mongodb.com/manual/)
[Mongoose](https://mongoosejs.com/)
```shell
$ docker pull mongo
$ docker run --name mongo -d mongo --serviceExecutor adaptive
$ docker exec -it mongo bash
```
[SQL analogy](https://docs.mongodb.com/manual/reference/sql-comparison/)
https://docs.mongodb.com/manual/tutorial/getting-started/