Files
courses/py3interm/EXAMPLES/db_sqlite_bulk_insert.py
T
2025-05-20 11:57:43 -04:00

97 lines
1.9 KiB
Python

#!/usr/bin/env python
import os
import sqlite3
import random
FRUITS = ["pomegranate", "cherry", "apricot", "date", "apple",
"lemon", "kiwi", "orange", "lime", "watermelon", "guava",
"papaya", "fig", "pear", "banana", "tamarind", "persimmon",
"elderberry", "peach", "blueberry", "lychee", "grape"]
DB_NAME = 'fruitprices.db' # <1>
CREATE_TABLE = """
create table fruit (
name varchar(30),
price decimal
)
""" # <2>
INSERT = '''
insert into fruit (name, price) values (?, ?)
''' # <3>
def main():
"""
Program entry point.
:return: None
"""
conn = get_connection()
create_database(conn)
populate_database(conn)
read_database()
def get_connection():
"""
Get a connection to the PRODUCE database
:return: SQLite3 connection object.
"""
if os.path.exists(DB_NAME):
os.remove(DB_NAME) # <4>
s3conn = sqlite3.connect(DB_NAME) # <5>
return s3conn
def create_database(conn):
"""
Create the fruit table
:param conn: The database connection
:return: None
"""
conn.execute(CREATE_TABLE) # <6>
def populate_database(conn):
"""
Add rows to the fruit table
:param conn: The database connection
:return: None
"""
fruit_data = get_fruit_data() # [('apple', .49), ('kiwi', .38)]
try:
conn.executemany(INSERT, fruit_data) # <7>
except sqlite3.DatabaseError as err:
print(err)
conn.rollback()
else:
conn.commit() # <8>
def get_fruit_data():
"""
Create iterable of fruit records.
:return: Generator of name/price tuples.
"""
return ((f, round(random.random() * 10 + 5, 2)) for f in FRUITS) # <9>
def read_database():
conn = sqlite3.connect(DB_NAME)
for name, price in conn.execute('select name, price from fruit'):
print('{:12s} {:6.2f}'.format(name, price))
if __name__ == '__main__':
main()