Source code for sasnets.util.p2sql

"""
Utility script that uploads data files to a python script.

Reads files generated by sasmodels and uploads the individual data sessions
to a postgres database running on localhost. Slow.
"""
from __future__ import print_function

import argparse
import ast
import os
import re
import sys

import psycopg2 as pgsql

parser = argparse.ArgumentParser()
parser.add_argument("key", help="DB Table identifier")
parser.add_argument("-c", "--create", help="Create new db", action="store_true")
parser.add_argument("path", help="Relative or absolute path to a folder "
                                 "containing data files")


# noinspection SqlNoDataSourceInspection,SqlResolve
[docs]def main(args): """ Main function. Args should conform to the argparse args specified. :param args: Arguments from the command line :return: None """ parsed = parser.parse_args(args) conn = pgsql.connect( "dbname=sas_data user=sasnets password=sasnets host=127.0.0.1") c = conn.cursor() if parsed.create: c.execute("CREATE TABLE data_" + parsed.key + "(Name TEXT NOT NULL, Num INTEGER NOT NULL, Q TEXT NOT NULL, " "IQ TEXT NOT NULL)") path = parsed.path nlines = 0 pattern = re.compile("all") for fn in sorted(os.listdir(path)): if pattern.search(fn): try: with open(path + fn, 'r') as fd: iq_list, y_list = (list() for i in range(2)) print("Reading " + fn) templ = ast.literal_eval(fd.readline().strip()) y_list.extend([templ[0] for i in range(templ[1])]) ast.literal_eval(fd.readline().strip()) iq_list.extend(ast.literal_eval(fd.readline().strip())) nlines += templ[1] for iq, y in zip(iq_list, y_list): c.execute( "INSERT INTO train_data (iq, model) VALUES (%S, %S)", (iq, y)) del iq_list del y_list except: raise conn.commit() c.close() conn.close()
if __name__ == "__main__": main(sys.argv[1:])