diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-08-28 01:27:19 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2005-08-28 01:27:19 +0000 |
| commit | f91cfdb8ac8794ea8e9f348b21ebbbf553d8bd4b (patch) | |
| tree | 01b5801f6d5d8560d1eb449bdb7eb100704eacf0 /lib/sqlalchemy/databases | |
| parent | dac3df1a1a5b04ee2caa91b350291e0050b86d51 (diff) | |
| download | sqlalchemy-f91cfdb8ac8794ea8e9f348b21ebbbf553d8bd4b.tar.gz | |
dev
Diffstat (limited to 'lib/sqlalchemy/databases')
| -rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 15 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/sqlite.py | 13 |
2 files changed, 20 insertions, 8 deletions
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index fa5124ed1..f6d56d207 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -52,15 +52,22 @@ class PGSQLEngine(ansisql.ANSISQLEngine): statement.accept_visitor(compiler) return compiler + def last_inserted_ids(self): + return self.context.last_inserted_ids + def pre_exec(self, connection, cursor, statement, parameters, echo = None, compiled = None, **kwargs): if compiled is None: return if getattr(compiled, "isinsert", False): + last_inserted_ids = [] for primary_key in compiled.statement.table.primary_keys: # pseudocode if echo is True or self._echo: self.log(primary_key.sequence.text) res = cursor.execute(primary_key.sequence.text) - parameters[primary_key.key] = res.fetchrow()[0] + newid = res.fetchrow()[0] + parameters[primary_key.key] = newid + last_inserted_ids.append(newid) + self.context.last_inserted_ids = last_inserted_ids def dbapi(self): return None @@ -73,10 +80,8 @@ class PGSQLEngine(ansisql.ANSISQLEngine): raise NotImplementedError() class PGCompiler(ansisql.ANSICompiler): - def visit_insert(self, insert): - self.isinsert = True - super(self).visit_insert(insert) - + pass + class PGColumnImpl(sql.ColumnSelectable): def get_specification(self): coltype = self.column.type diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 315374a6d..475f68737 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -49,8 +49,13 @@ class SQLiteSQLEngine(ansisql.ANSISQLEngine): self.opts = opts or {} ansisql.ANSISQLEngine.__init__(self, **params) + def post_exec(self, connection, cursor, statement, parameters, echo = None, compiled = None, **kwargs): + if compiled is None: return + if getattr(compiled, "isinsert", False): + self.context.last_inserted_ids = [cursor.lastrowid] + def last_inserted_ids(self): - pass + return self.context.last_inserted_ids def connect_args(self): return ([self.filename], self.opts) @@ -81,5 +86,7 @@ class SQLiteColumnImpl(sql.ColumnSelectable): else: key = coltype.__class__ - return self.name + " " + colspecs[key] % {'precision': getattr(coltype, 'precision', None), 'length' : getattr(coltype, 'length', None)} - + colspec = self.name + " " + colspecs[key] % {'precision': getattr(coltype, 'precision', None), 'length' : getattr(coltype, 'length', None)} + if self.column.primary_key: + colspec += " PRIMARY KEY" + return colspec |
