Hi,
I'm trying to port my apps to use ORACLE. So, I have a table, e.g.
t_primary_dataset which defined as:

t_primary_dataset = Table('t_primary_dataset', engine,
  Column('id', Integer, nullable = False, primary_key = True),
  Column('name', String(100), nullable = False)
)

I defined class (in capitals) and a mapper for this table. Then I used
the following code to insert data into this table:

       session = create_session()
       transaction = session.create_transaction()
       try:
           tp = T_PRIMARY_DATASET(datasetName)
           session.save(tp)
           session.flush()
       except Exception, ex:
           transaction.rollback()
           raise DbsDatabaseError(args=ex)
       transaction.commit()

The code above works just fine with SQLite, MySQL with the following output:
[2006-06-14 13:46:14,524] [engine]: BEGIN
[2006-06-14 13:46:14,525] [engine]: INSERT INTO t_primary_dataset
(name) VALUES (?)
[2006-06-14 13:46:14,525] [engine]: ['ThisIsATestDatasetf']
[2006-06-14 13:46:14,526] [engine]: COMMIT
[2006-06-14 13:46:14,537] [engine]: COMMIT

But when I used ORACLE, I got the following:
[2006-06-14 13:46:40,421] [engine]: BEGIN
[2006-06-14 13:46:40,422] [engine]: INSERT INTO t_primary_dataset (id,
name) VALUES (:id, :name)
[2006-06-14 13:46:40,423] [engine]: {'id': None, 'name': 'ThisIsATestDatasetf'}
[2006-06-14 13:46:40,430] [engine]: ROLLBACK
[2006-06-14 13:46:40,433] [engine]: ROLLBACK
Traceback (most recent call last):
  File "/home/vk/CMS/DBS/work/prototype/DBSSchema/DBSManager.py", line
528, in createPrimaryDataset
    session.flush()
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line
233, in flush
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
252, in flush
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
420, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
695, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py", line
645, in _save_objects
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/mapper.py", line
661, in save_obj
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
240, in execute
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
264, in execute_clauseelement
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
280, in execute_compiled
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
276, in proxy
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
315, in _execute_raw
  File "build/bdist.linux-i686/egg/sqlalchemy/engine/base.py", line
334, in _execute
sqlalchemy.exceptions.SQLError: (DatabaseError) ORA-01400: cannot
insert NULL into ("MYDB"."T_PRIMARY_DATASET"."ID")
 'INSERT INTO t_primary_dataset (id, name) VALUES (:id, :name)' {'id':
None, 'name': 'ThisIsATestDatasetf'}

The difference is that in the case of ORACLE the insert statement use
explicitly id and pass None to id. In the case of SQLite/MySQL id is
created automatically by DB for my insert.

Could someone tell me what's wrong.

Thanks,
Valentin.

-- 
Thank you,
Valentin


_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to