pwtools.sql.sql_matrix¶
- pwtools.sql.sql_matrix(lists, header=None, colnames=None, sqlval_funcs=None, fileval_funcs=None)[source]¶
Convert each entry in a list of lists (“matrix” = sql table) to an SQLEntry based on header. This can be used to quickly convert the result of comb.nested_loops() (nested lists) to input params_lst for ParameterStudy.
The entries in the lists can have arbitrary values, but each “column” should have the same type. Each sublist (= row) can be viewed as a record in an sql database, each column as input for sql_column().
If you provide header, then tyes for each column are taken from that. If colnames are used, then types are fetched (by find_sqltype()) from the first row. May not work for “incomplete” datasets, where some entries in the first row are None (NULL in sqlite).
- Parameters:
lists (list of lists)
header (sequence, optional) – [(‘foo’, ‘integer’), (‘bar’, ‘float’), …], see sql.SQLiteDB
colnames (sequence os strings, optional) – Use either colnames or header.
sqlval_funcs ({None, dict}) – For certain (or all) columns, you can specify a sqlval_func / fileval_func. They have the same meaning as in sql_column(). E.g. sql_matrix(…, fileval_funcs={‘foo’: lambda x: str(x)+’-value’}) would set fileval_func for the whole column ‘foo’.
fileval_funcs ({None, dict}) – For certain (or all) columns, you can specify a sqlval_func / fileval_func. They have the same meaning as in sql_column(). E.g. sql_matrix(…, fileval_funcs={‘foo’: lambda x: str(x)+’-value’}) would set fileval_func for the whole column ‘foo’.
- Return type:
list of lists
Examples
>>> lists=comb.nested_loops([[1.0,2.0], zip(['a']*2, [777,888])],flatten=True) >>> lists [[1.0, 'a', 777], [1.0, 'a', 888], [2.0, 'a', 777], [2.0, 'a', 888]] >>> # use explicit header >>> header=[('col0', 'float'), ('col1', 'text'), ('col2', 'integer')] >>> m=sql.sql_matrix(lists, header=header) >>> for row in m: print([(xx.key, xx.fileval, xx.sqltype)) for xx in row] [('col0', 1.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 777, 'INTEGER')] [('col0', 1.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 888, 'INTEGER')] [('col0', 2.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 777, 'INTEGER')] [('col0', 2.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 888, 'INTEGER')] >>> # use colnames -> automatic sqltype detected, also use fileval_funcs >>> m=sql.sql_matrix(lists, colnames=['col0','col1','col2'], fileval_funcs={'col0': lambda x: x*100}) >>> for row in m: print([(xx.key, xx.fileval, xx.sqltype)) for xx in row] [('col0', 100.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 777, 'INTEGER')] [('col0', 100.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 888, 'INTEGER')] [('col0', 200.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 777, 'INTEGER')] [('col0', 200.0, 'REAL'), ('col1', 'a', 'TEXT'), ('col2', 888, 'INTEGER')]