| 124 | |
| 125 | # Creates on updates a database row without incrementing the rowid |
| 126 | def insertOrUpdate(self, table, query_sets, query_wheres, oninsert={}): |
| 127 | sql_sets = ["%s = :%s" % (key, key) for key in query_sets.keys()] |
| 128 | sql_wheres = ["%s = :%s" % (key, key) for key in query_wheres.keys()] |
| 129 | |
| 130 | params = query_sets |
| 131 | params.update(query_wheres) |
| 132 | self.execute( |
| 133 | "UPDATE %s SET %s WHERE %s" % (table, ", ".join(sql_sets), " AND ".join(sql_wheres)), |
| 134 | params |
| 135 | ) |
| 136 | if self.cursor.rowcount == 0: |
| 137 | params.update(oninsert) # Add insert-only fields |
| 138 | self.execute("INSERT INTO %s ?" % table, params) |
| 139 | |
| 140 | # Create new table |
| 141 | # Return: True on success |