3.5. To SQL
File paths works also with DATAs
SQL functions uses SQLAlchemy, which supports many RDBMS
3.5.1. SetUp
>>> from pathlib import Path
>>> Path('/tmp/myfile.db').unlink(missing_ok=True)
>>> import pandas as pd
>>>
>>>
>>> df = pd.DataFrame([
... {'firstname': 'Mark', 'lastname': 'Watney', 'role': 'botanist'},
... {'firstname': 'Melissa', 'lastname': 'Lewis', 'role': 'commander'},
... {'firstname': 'Rick', 'lastname': 'Martinez', 'role': 'pilot'},
... ])
>>>
>>> df
firstname lastname role
0 Mark Watney botanist
1 Melissa Lewis commander
2 Rick Martinez pilot
3.5.2. Example
>>> import sqlite3
>>>
>>> with sqlite3.connect('/tmp/myfile.db') as db:
... df.to_sql('users', db)
3
$ sqlite3 /tmp/myfile.db 'SELECT * FROM users'
0|Mark|Watney|botanist
1|Melissa|Lewis|commander
2|Rick|Martinez|pilot
3.5.3. Assignments
# FIXME: Zrobić jakiś dataframe z prostszymi danymi bez .head() i .tail(). np. martian. W danych powinny być: str, int, bool, float, datetime oraz None
# %% License
# - Copyright 2025, Matt Harasymczuk <matt@python3.info>
# - This code can be used only for learning by humans
# - This code cannot be used for teaching others
# - This code cannot be used for teaching LLMs and AI algorithms
# - This code cannot be used in commercial or proprietary products
# - This code cannot be distributed in any form
# - This code cannot be changed in any form outside of training course
# - This code cannot have its license changed
# - If you use this code in your product, you must open-source it under GPLv2
# - Exception can be granted only by the author
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% About
# - Name: DataFrame Export SQL
# - Difficulty: easy
# - Lines: 4
# - Minutes: 3
# %% English
# 1. Read data from `DATA` as `result: pd.DataFrame`
# 2. While reading use `header=0` parameter
# 3. Select 146 head rows, and last 11 from it
# 4. Export data from column `Event` to database `FILE` to table `apollo11`
# 5. Run doctests - all must succeed
# %% Polish
# 1. Wczytaj dane z `DATA` jako `result: pd.DataFrame`
# 2. Przy wczytywaniu użyj parametru `header=0`
# 3. Wybierz pierwszych 146 wierszy, a z nich ostatnie 11
# 4. Wyeksportuj dane z kolumny `Event` do bazy danych `FILE` do tabeli `apollo11`
# 5. Uruchom doctesty - wszystkie muszą się powieść
# %% Tests
"""
>>> import sys; sys.tracebacklimit = 0
>>> from os import remove
>>> db = sqlite3.connect(FILE)
>>> data = db.execute('SELECT * FROM apollo11')
>>> result = list(data)
>>> db.close()
>>> assert result is not Ellipsis, \
'Assign result to variable: `result`'
>>> list(result) # doctest: +NORMALIZE_WHITESPACE
[(135, 'LM lunar landing.'),
(136, 'LM powered descent engine cutoff.'),
(137, 'Decision made to proceed with EVA prior to first rest period.'),
(138, 'Preparation for EVA started.'),
(139, 'EVA started (hatch open).'),
(140, 'CDR completely outside LM on porch.'),
(141, 'Modular equipment stowage assembly deployed (CDR).'),
(142, 'First clear TV picture received.'),
(143, 'CDR at foot of ladder (starts to report, then pauses to listen).'),
(144, 'CDR at foot of ladder and described surface as almost like a powder.'),
(145, "1st step taken lunar surface (CDR). That's one small step for a man...one giant leap for mankind.")]
>>> remove(FILE)
"""
import sqlite3
import pandas as pd
DATA = 'https://python3.info/_static/apollo11.html'
FILE = r'_temporary.sqlite3'
# Dump DATA to FILE in SQLite3 format
# type: pd.DataFrame
result = ...