initial creation
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Provide metadata (tables and column names) for a Sqlite3 database
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
|
||||
TABLE_QUERY = '''
|
||||
select name
|
||||
from sqlite_master
|
||||
order by name
|
||||
'''
|
||||
|
||||
|
||||
def main(database_file):
|
||||
"""
|
||||
Program entry point
|
||||
|
||||
PARAMS:
|
||||
database_file: name of Sqlite database file
|
||||
"""
|
||||
mycursor = connect_to_dbserver(database_file)
|
||||
tables = get_all_tables_from_database(mycursor)
|
||||
print('-' * 60)
|
||||
for table in tables:
|
||||
print(table)
|
||||
columns = get_columns_for_table(mycursor, table)
|
||||
for col_name, col_type, is_nullable, default_value in columns:
|
||||
print(col_name, col_type, is_nullable, default_value)
|
||||
|
||||
|
||||
def connect_to_dbserver(database_file):
|
||||
"""
|
||||
Connect to specified Sqlite3 database
|
||||
|
||||
PARAMS:
|
||||
database_file: name of Sqlite3 database file to query
|
||||
"""
|
||||
with sqlite3.connect(database_file) as s3conn:
|
||||
return s3conn.cursor()
|
||||
|
||||
|
||||
def get_all_tables_from_database(mycursor):
|
||||
"""
|
||||
Get list of tables in database
|
||||
|
||||
PARAMS:
|
||||
mycursor: open Sqlite3 database cursor
|
||||
|
||||
:rtype : list of table names
|
||||
"""
|
||||
|
||||
mycursor.execute(TABLE_QUERY)
|
||||
|
||||
return [row[0] for row in mycursor.fetchall() if not row[0].startswith('sqlite')]
|
||||
|
||||
|
||||
def get_columns_for_table(mycursor, table_name):
|
||||
"""
|
||||
Get list of columns and metadata for specified table
|
||||
|
||||
PARAMS:
|
||||
mycursor: open Sqlite3 database cursor
|
||||
table_name: table for which to return columns
|
||||
|
||||
CAUTION: do not pass unverified information to this function;
|
||||
it is not checked for SQL injection issues
|
||||
|
||||
:rtype : list of lists, each with name, type, nullable flag, and default value
|
||||
"""
|
||||
|
||||
mycursor.execute('pragma table_info({})'.format(table_name))
|
||||
return [row[1:-1] for row in mycursor.fetchall()] # 1st column is ordinal; last is PK flag
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main("../DATA/presidents.db")
|
||||
Reference in New Issue
Block a user