Re: [sqlalchemy] IntegrityError following the tutorial using OracleDB
On 04/21/2017 04:30 AM, Simon King wrote: On Fri, Apr 21, 2017 at 1:52 AM, Matei Micu wrote: I'm following the tutorial from http://docs.sqlalchemy.org/en/latest/orm/tutorial.html , from my understanding the primary key should be added when a session flushes the content ( in the tutorial the first flush is triggered by a query ). When I try to follow the tutorial I get a IntegrityError Here is my code. import sqlalchemy from sqlalchemy.ext import declarative from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String url = "oracle+cx_oracle://ASCIIPIC:ASCIIPIC@127.0.0.1:58639/xe" engine = sqlalchemy.create_engine(url, convert_unicode=True, echo=True) engine.execute("DROP TABLE users") Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) fullname = Column(String(50)) password = Column(String(50)) def __repr__(self): return "" % (self.name, self.fullname, self.password) Base.metadata.create_all(engine) ed_user = User(name='ed', fullname='Ed Jones', password='edspassword') Session = sessionmaker(bind=engine) session = Session() session.add(ed_user) # As per tutorial, here the session should flush the content and assign # an id to the user our_user = session.query(User).filter_by(name='ed').first() Here is the outputand traceback: mmicu@nuc1 $ python -i test.py 2017-04-21 03:47:01,191 INFO sqlalchemy.engine.base.Engine SELECT USER FROM DUAL 2017-04-21 03:47:01,191 INFO sqlalchemy.engine.base.Engine {} 2017-04-21 03:47:01,193 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM DUAL 2017-04-21 03:47:01,193 INFO sqlalchemy.engine.base.Engine {} 2017-04-21 03:47:01,194 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS NVARCHAR2(60)) AS anon_1 FROM DUAL 2017-04-21 03:47:01,194 INFO sqlalchemy.engine.base.Engine {} 2017-04-21 03:47:01,196 INFO sqlalchemy.engine.base.Engine DROP TABLE users 2017-04-21 03:47:01,196 INFO sqlalchemy.engine.base.Engine {} 2017-04-21 03:47:01,212 INFO sqlalchemy.engine.base.Engine COMMIT 2017-04-21 03:47:01,216 INFO sqlalchemy.engine.base.Engine SELECT table_name FROM all_tables WHERE table_name = :name AND owner = :schema_name 2017-04-21 03:47:01,216 INFO sqlalchemy.engine.base.Engine {'name': u'USERS', 'schema_name': u'ASCIIPIC'} 2017-04-21 03:47:01,268 INFO sqlalchemy.engine.base.Engine CREATE TABLE users ( id INTEGER NOT NULL, name VARCHAR2(50 CHAR), fullname VARCHAR2(50 CHAR), password VARCHAR2(50 CHAR), PRIMARY KEY (id) ) 2017-04-21 03:47:01,268 INFO sqlalchemy.engine.base.Engine {} 2017-04-21 03:47:01,332 INFO sqlalchemy.engine.base.Engine COMMIT 2017-04-21 03:47:01,334 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 2017-04-21 03:47:01,335 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, fullname, password) VALUES (:name, :fullname, :password) RETURNING users.id INTO :ret_0 2017-04-21 03:47:01,335 INFO sqlalchemy.engine.base.Engine {'fullname': u'Ed Jones', 'password': u'edspassword', 'name': u'ed', 'ret_0': } 2017-04-21 03:47:01,337 INFO sqlalchemy.engine.base.Engine ROLLBACK Traceback (most recent call last): File "t.py", line 33, in our_user = session.query(User).filter_by(name='ed').first() File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2755, in first ret = list(self[0:1]) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2547, in __getitem__ return list(res) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2854, in __iter__ self.session._autoflush() File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1375, in _autoflush util.raise_from_cause(e) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1365, in _autoflush self.flush() File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2139, in flush self._flush(objects) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2259, in _flush transaction.rollback(_capture_exception=True) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 66, in __exit__ compat.reraise(exc_type, exc_value, exc_tb) File "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalc
Re: [sqlalchemy] IntegrityError following the tutorial using OracleDB
On Fri, Apr 21, 2017 at 1:52 AM, Matei Micu wrote: > I'm following the tutorial from > http://docs.sqlalchemy.org/en/latest/orm/tutorial.html , from my > understanding the primary key should be added when > a session flushes the content ( in the tutorial the first flush is triggered > by a query ). When I try to follow the tutorial I get a > IntegrityError > > Here is my code. > import sqlalchemy > from sqlalchemy.ext import declarative > from sqlalchemy.orm import sessionmaker > from sqlalchemy.ext.declarative import declarative_base > from sqlalchemy import Column, Integer, String > > url = "oracle+cx_oracle://ASCIIPIC:ASCIIPIC@127.0.0.1:58639/xe" > engine = sqlalchemy.create_engine(url, convert_unicode=True, echo=True) > engine.execute("DROP TABLE users") > > Base = declarative_base() > > class User(Base): > __tablename__ = 'users' > > id = Column(Integer, primary_key=True) > name = Column(String(50)) > fullname = Column(String(50)) > password = Column(String(50)) > > def __repr__(self): > return "" % > (self.name, self.fullname, self.password) > > Base.metadata.create_all(engine) > ed_user = User(name='ed', fullname='Ed Jones', password='edspassword') > > Session = sessionmaker(bind=engine) > session = Session() > session.add(ed_user) > > # As per tutorial, here the session should flush the content and assign > # an id to the user > our_user = session.query(User).filter_by(name='ed').first() > > > Here is the outputand traceback: > > mmicu@nuc1 $ python -i test.py > 2017-04-21 03:47:01,191 INFO sqlalchemy.engine.base.Engine SELECT USER FROM > DUAL > 2017-04-21 03:47:01,191 INFO sqlalchemy.engine.base.Engine {} > 2017-04-21 03:47:01,193 INFO sqlalchemy.engine.base.Engine SELECT CAST('test > plain returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM DUAL > 2017-04-21 03:47:01,193 INFO sqlalchemy.engine.base.Engine {} > 2017-04-21 03:47:01,194 INFO sqlalchemy.engine.base.Engine SELECT CAST('test > unicode returns' AS NVARCHAR2(60)) AS anon_1 FROM DUAL > 2017-04-21 03:47:01,194 INFO sqlalchemy.engine.base.Engine {} > 2017-04-21 03:47:01,196 INFO sqlalchemy.engine.base.Engine DROP TABLE users > 2017-04-21 03:47:01,196 INFO sqlalchemy.engine.base.Engine {} > 2017-04-21 03:47:01,212 INFO sqlalchemy.engine.base.Engine COMMIT > 2017-04-21 03:47:01,216 INFO sqlalchemy.engine.base.Engine SELECT table_name > FROM all_tables WHERE table_name = :name AND owner = :schema_name > 2017-04-21 03:47:01,216 INFO sqlalchemy.engine.base.Engine {'name': > u'USERS', 'schema_name': u'ASCIIPIC'} > 2017-04-21 03:47:01,268 INFO sqlalchemy.engine.base.Engine > CREATE TABLE users ( > id INTEGER NOT NULL, > name VARCHAR2(50 CHAR), > fullname VARCHAR2(50 CHAR), > password VARCHAR2(50 CHAR), > PRIMARY KEY (id) > ) > > > 2017-04-21 03:47:01,268 INFO sqlalchemy.engine.base.Engine {} > 2017-04-21 03:47:01,332 INFO sqlalchemy.engine.base.Engine COMMIT > 2017-04-21 03:47:01,334 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) > 2017-04-21 03:47:01,335 INFO sqlalchemy.engine.base.Engine INSERT INTO users > (name, fullname, password) VALUES (:name, :fullname, :password) RETURNING > users.id INTO :ret_0 > 2017-04-21 03:47:01,335 INFO sqlalchemy.engine.base.Engine {'fullname': u'Ed > Jones', 'password': u'edspassword', 'name': u'ed', 'ret_0': > } > 2017-04-21 03:47:01,337 INFO sqlalchemy.engine.base.Engine ROLLBACK > Traceback (most recent call last): > File "t.py", line 33, in > our_user = session.query(User).filter_by(name='ed').first() > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", > line 2755, in first > ret = list(self[0:1]) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", > line 2547, in __getitem__ > return list(res) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", > line 2854, in __iter__ > self.session._autoflush() > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", > line 1375, in _autoflush > util.raise_from_cause(e) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", > line 203, in raise_from_cause > reraise(type(exception), exception, tb=exc_tb, cause=cause) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", > line 1365, in _autoflush > self.flush() > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", > line 2139, in flush > self._flush(objects) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", > line 2259, in _flush > transaction.rollback(_capture_exception=True) > File > "/home/mmicu/Git/asciipic/.venv/test/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", > line