From: Mike Bayer Date: Sun, 19 Feb 2006 00:26:22 +0000 (+0000) Subject: exceptions added X-Git-Tag: rel_0_1_1~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d442d2471a34c848abf51951460d9066a708aa7;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git exceptions added postgres last_inserted_ids will raise an error unless OID's are turned on (INSERT with PK defaults + no OIDs wont fail unless this method is called) --- diff --git a/lib/sqlalchemy/databases/information_schema.py b/lib/sqlalchemy/databases/information_schema.py index eb0863100a..825e0017a8 100644 --- a/lib/sqlalchemy/databases/information_schema.py +++ b/lib/sqlalchemy/databases/information_schema.py @@ -3,6 +3,7 @@ import sqlalchemy.engine as engine import sqlalchemy.schema as schema import sqlalchemy.ansisql as ansisql import sqlalchemy.types as sqltypes +from sqlalchemy.exceptions import * from sqlalchemy import * from sqlalchemy.ansisql import * @@ -70,7 +71,7 @@ class ISchema(object): try: gen_tbl = globals()['gen_'+name] except KeyError: - raise AttributeError('information_schema table %s not found' % name) + raise ArgumentError('information_schema table %s not found' % name) self.cache[name] = gen_tbl.toengine(self.engine) return self.cache[name] diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index a5b5b250dc..011dcfd2ab 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -11,8 +11,9 @@ import sqlalchemy.engine as engine import sqlalchemy.schema as schema import sqlalchemy.ansisql as ansisql import sqlalchemy.types as sqltypes +from sqlalchemy.exceptions import * from sqlalchemy import * -import sqlalchemy.databases.information_schema as ischema +import information_schema as ischema try: import psycopg2 as psycopg @@ -156,7 +157,7 @@ class PGSQLEngine(ansisql.ANSISQLEngine): self.use_oids = use_oids if module is None: if psycopg is None: - raise "Couldnt locate psycopg1 or psycopg2: specify postgres module argument" + raise ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument") self.module = psycopg else: self.module = module @@ -186,9 +187,6 @@ class PGSQLEngine(ansisql.ANSISQLEngine): else: return sqltypes.adapt_type(typeobj, pg1_colspecs) - def last_inserted_ids(self): - return self.context.last_inserted_ids - def compiler(self, statement, bindparams, **kwargs): return PGCompiler(self, statement, bindparams, **kwargs) @@ -207,7 +205,10 @@ class PGSQLEngine(ansisql.ANSISQLEngine): return self._default_schema_name def last_inserted_ids(self): - return self.context.last_inserted_ids + if self.context.last_inserted_ids is None: + raise InvalidRequestError("no INSERT executed, or cant use cursor.lastrowid without Postgres OIDs enabled") + else: + return self.context.last_inserted_ids def oid_column_name(self): if self.use_oids: @@ -221,7 +222,8 @@ class PGSQLEngine(ansisql.ANSISQLEngine): def post_exec(self, proxy, compiled, parameters, **kwargs): if getattr(compiled, "isinsert", False) and self.context.last_inserted_ids is None: if not self.use_oids: - raise "cant use cursor.lastrowid without OIDs enabled" + pass + # will raise invalid error when they go to get them else: table = compiled.statement.table cursor = proxy() diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index b0101c3f22..240773043c 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -12,6 +12,7 @@ import sqlalchemy.engine as engine import sqlalchemy.schema as schema import sqlalchemy.ansisql as ansisql import sqlalchemy.types as sqltypes +from sqlalchemy.exceptions import * from sqlalchemy.ansisql import * import datetime,time @@ -123,7 +124,7 @@ def descriptor(): class SQLiteSQLEngine(ansisql.ANSISQLEngine): def __init__(self, opts, **params): if sqlite is None: - raise "Couldn't import pysqlite2" + raise ArgumentError("Couldn't import sqlite or pysqlite2") self.filename = opts.pop('filename', ':memory:') self.opts = opts or {} params['poolclass'] = sqlalchemy.pool.SingletonThreadPool