|
| def | _unnest_col (col_identifier) |
| |
| def | pg_prepare_insert_script_unnest (_tbl_name, _columns) |
| |
| def | pg_prepare_insert_single_dict (_tbl_name, _columns, **kwargs) |
| |
| def | pg_prepare_insert_single_list (_tbl_name, _columns, **kwargs) |
| |
| def | pg_prepare_insert_script_execute_values_dict (_tbl_name, _columns) |
| |
| def | pg_prepare_insert_script_execute_values_list (_tbl_name, _columns) |
| |
| def | pg_prepare_select_script (_tbl_name, _where_conditions, select_columns, **kwargs) |
| |
| def | pg_check_table_exists (_tbl_name) |
| |
| def | pg_prepare_create_script (_tbl_name, _col_name_type_pair_str) |
| |
| def | pg_prepare_table_cleanup_script (_tbl_name, _where_conditions) |
| |
| def | pg_prepare_diagnostic_error (_diag) |
| |
Module for safe sql generation and provides psycopg2 context manager.
This module contains class PGSession for psycopg2 connection session
handling and database utility functions for sql query generation.
psycopg2.sql module is being used to generate all, safe sql statements.
| def ody_migr_db_handler.pg_prepare_insert_script_execute_values_dict |
( |
|
_tbl_name, |
|
|
|
_columns |
|
) |
| |
Prepare insertion script
Uses single placeholder for list of multiple records as required by
psycopg2.extra.execute_values()
Example script:
INSERT INTO psycopg2_insert_time_test ("first_name", "last_name",
"email", "gender", "ip_address", "ssn", "company_name", "race",
"department") VALUES %s
Example template snippet:
( %(first_name)s, %(last_name)s, %(email)s, %(gender)s, %(ip_address)s,
%(ssn)s, %(company_name)s, %(race)s, %(department)s )
`argslist` for psycopg2.extra.execute_values is a sequence of dictionary
Args:
_tbl_name: name of the table to insert
_column_names: list/tuple of column names
Returns::
record insertion script a single placeholders and template placeholder
for each row
Definition at line 188 of file ody_migr_db_handler.py.
188 def pg_prepare_insert_script_execute_values_dict(_tbl_name, _columns):
189 """Prepare insertion script 191 Uses single placeholder for list of multiple records as required by 192 psycopg2.extra.execute_values() 195 INSERT INTO psycopg2_insert_time_test ("first_name", "last_name", 196 "email", "gender", "ip_address", "ssn", "company_name", "race", 197 "department") VALUES %s 199 Example template snippet: 200 ( %(first_name)s, %(last_name)s, %(email)s, %(gender)s, %(ip_address)s, 201 %(ssn)s, %(company_name)s, %(race)s, %(department)s ) 203 `argslist` for psycopg2.extra.execute_values is a sequence of dictionary 206 _tbl_name: name of the table to insert 207 _column_names: list/tuple of column names 210 record insertion script a single placeholders and template placeholder 213 template = sql.SQL(
'( {} )').format(
214 sql.SQL(
', ').join(map(sql.Placeholder, _columns)))
216 "INSERT INTO {} ({}) VALUES {}").format(
218 sql.SQL(
", ").join(map(sql.Identifier, _columns)),
220 return script, template
| def ody_migr_db_handler.pg_prepare_insert_script_execute_values_list |
( |
|
_tbl_name, |
|
|
|
_columns |
|
) |
| |
Prepare insertion script
Uses single placeholder for list of multiple records as required by
psycopg2.extra.execute_values()
Example script:
INSERT INTO psycopg2_insert_time_test ("first_name", "last_name",
"email", "gender", "ip_address", "ssn", "company_name", "race",
"department") VALUES %s
Example template snippet:
( %s, %s, %s, %s, %s, %s, %s, %s, %s )
`argslist` for psycopg2.extra.execute_values is a sequence of sequence
Args:
_tbl_name: name of the table to insert
_column_names: list/tuple of column names
Returns::
record insertion script a single placeholders and template placeholder
for each row
Definition at line 223 of file ody_migr_db_handler.py.
223 def pg_prepare_insert_script_execute_values_list(_tbl_name, _columns):
224 """Prepare insertion script 226 Uses single placeholder for list of multiple records as required by 227 psycopg2.extra.execute_values() 230 INSERT INTO psycopg2_insert_time_test ("first_name", "last_name", 231 "email", "gender", "ip_address", "ssn", "company_name", "race", 232 "department") VALUES %s 234 Example template snippet: 235 ( %s, %s, %s, %s, %s, %s, %s, %s, %s ) 237 `argslist` for psycopg2.extra.execute_values is a sequence of sequence 240 _tbl_name: name of the table to insert 241 _column_names: list/tuple of column names 244 record insertion script a single placeholders and template placeholder 247 template = sql.SQL(
'( {} )').format(
248 sql.SQL(
', ').join(sql.Placeholder() * len(_columns)))
251 "INSERT INTO {} ({}) VALUES {}").format(
253 sql.SQL(
", ").join(map(sql.Identifier, _columns)),
255 return script, template
| def ody_migr_db_handler.pg_prepare_insert_script_unnest |
( |
|
_tbl_name, |
|
|
|
_columns |
|
) |
| |
Prepare insertion script - efficient unnest operation
Uses SELECT unnest property to efficiently read column wise values one
at a time from the {col1: list of values, col2: list of values,
col3: list of values} formatted dictionary for efficient bulk insertion.
Example script:
INSERT INTO psycopg2_insert_time_test
("first_name", "last_name", "email", "gender", "ip_address",
"ssn", "company_name", "race", "department")
SELECT unnest( %(first_name)s ), unnest( %(last_name)s ),
unnest( %(email)s ),
unnest( %(gender)s ),
unnest( %(ip_address)s ),
unnest( %(ssn)s ),
unnest( %(company_name)s ),
unnest( %(race)s ),
unnest( %(department)s )
`values` in cursor.execute() would be a dictionary of following
structure:
{
...
email: list of email values,
gender: list of gender values,
...
}
All the values (list) must have same number of elements for each
key (columns).
For example, first element of each of the key in the dictionary is
first record to be inserted in the database table, and so on.
Definition at line 69 of file ody_migr_db_handler.py.
69 def pg_prepare_insert_script_unnest(_tbl_name, _columns):
70 """Prepare insertion script - efficient unnest operation 72 Uses SELECT unnest property to efficiently read column wise values one 73 at a time from the {col1: list of values, col2: list of values, 74 col3: list of values} formatted dictionary for efficient bulk insertion. 77 INSERT INTO psycopg2_insert_time_test 78 ("first_name", "last_name", "email", "gender", "ip_address", 79 "ssn", "company_name", "race", "department") 80 SELECT unnest( %(first_name)s ), unnest( %(last_name)s ), 83 unnest( %(ip_address)s ), 85 unnest( %(company_name)s ), 87 unnest( %(department)s ) 89 `values` in cursor.execute() would be a dictionary of following 93 email: list of email values, 94 gender: list of gender values, 97 All the values (list) must have same number of elements for each 99 For example, first element of each of the key in the dictionary is 100 first record to be inserted in the database table, and so on. 102 return sql.SQL(
"INSERT INTO {} ({}) SELECT {}").format(
104 sql.SQL(
', ').join(map(sql.Identifier, _columns)),
106 map(_unnest_col, map(sql.Placeholder, _columns))))
| def ody_migr_db_handler.pg_prepare_insert_single_dict |
( |
|
_tbl_name, |
|
|
|
_columns, |
|
|
** |
kwargs |
|
) |
| |
Prepare insertion script - dictionary placeholders
Same for a single insertion and multiple insertion using executemany()
Example script:
INSERT INTO psycopg2_insert_time_test ("first_name", "last_name", "email",
"gender", "ip_address", "ssn", "company_name", "race", "department")
VALUES (%(first_name)s, %(last_name)s, %(email)s, %(gender)s,
%(ip_address)s, %(ssn)s, %(company_name)s, %(race)s, %(department)s)
`values` for cursor.execute() must be a single record (dict of values)
`values` for cursor.executemany must be a list/tuple of many records
(list/tuple of named dict)
Args:
_tbl_name: name of the table to insert
_columns: list/tuple of column names
**kwargs: returning_col: (optional) specify column name
you want to return after the insert execution script
Returns::
record insertion script with named placeholders
Definition at line 109 of file ody_migr_db_handler.py.
109 def pg_prepare_insert_single_dict(_tbl_name, _columns, **kwargs):
110 """Prepare insertion script - dictionary placeholders 112 Same for a single insertion and multiple insertion using executemany() 115 INSERT INTO psycopg2_insert_time_test ("first_name", "last_name", "email", 116 "gender", "ip_address", "ssn", "company_name", "race", "department") 117 VALUES (%(first_name)s, %(last_name)s, %(email)s, %(gender)s, 118 %(ip_address)s, %(ssn)s, %(company_name)s, %(race)s, %(department)s) 121 `values` for cursor.execute() must be a single record (dict of values) 122 `values` for cursor.executemany must be a list/tuple of many records 123 (list/tuple of named dict) 126 _tbl_name: name of the table to insert 127 _columns: list/tuple of column names 128 **kwargs: returning_col: (optional) specify column name 129 you want to return after the insert execution script 131 record insertion script with named placeholders 133 returning_col = kwargs.get(
"returning_col",
"")
135 insert_script = sql.SQL(
"INSERT INTO {} ({}) VALUES ({})").format(
137 sql.SQL(
', ').join(map(sql.Identifier, _columns)),
138 sql.SQL(
', ').join(map(sql.Placeholder, _columns)))
140 if returning_col ==
"":
143 script_returning = sql.SQL(
"RETURNING {}").format(
144 sql.Identifier(returning_col))
145 final_script = sql.SQL(
' ').join([insert_script, script_returning])
| def ody_migr_db_handler.pg_prepare_insert_single_list |
( |
|
_tbl_name, |
|
|
|
_columns, |
|
|
** |
kwargs |
|
) |
| |
Prepare database table insertion script - general placeholders
Same for a single insertion and multiple insertion using executemany()
Example script:
INSERT INTO "psycopg2_insert_time_test" ("ssn", "race", "first_name",
"last_name", "email", "company_name", "gender", "department", "ip_address")
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
values` for cursor.execute() must be a single record (list/tuple of values)
`values` for cursor.executemany must be a list/tuple of many records
(list/tuple of list/tuple)
Args:
_tbl_name: name of the table to insert
_column_names: list/tuple of column names
**kwargs: returning_col: (optional) specify column name
you want to return after the insert execution script
Returns::
record insertion script with general placeholders
Definition at line 149 of file ody_migr_db_handler.py.
149 def pg_prepare_insert_single_list(_tbl_name, _columns, **kwargs):
150 """Prepare database table insertion script - general placeholders 152 Same for a single insertion and multiple insertion using executemany() 155 INSERT INTO "psycopg2_insert_time_test" ("ssn", "race", "first_name", 156 "last_name", "email", "company_name", "gender", "department", "ip_address") 157 VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) 159 values` for cursor.execute() must be a single record (list/tuple of values) 160 `values` for cursor.executemany must be a list/tuple of many records 161 (list/tuple of list/tuple) 164 _tbl_name: name of the table to insert 165 _column_names: list/tuple of column names 166 **kwargs: returning_col: (optional) specify column name 167 you want to return after the insert execution script 169 record insertion script with general placeholders 171 returning_col = kwargs.get(
"returning_col",
"")
173 insert_script = sql.SQL(
"INSERT INTO {} ({}) VALUES ({})").format(
174 sql.Identifier(_tbl_name),
175 sql.SQL(
', ').join(map(sql.Identifier, _columns)),
176 sql.SQL(
', ').join(sql.Placeholder() * len(_columns))
179 if returning_col ==
"":
182 script_returning = sql.SQL(
"RETURNING {}").format(
183 sql.Identifier(returning_col))
184 final_script = sql.SQL(
' ').join([insert_script, script_returning])