저는 Flask와 SQLAlchemy (지난 3 년간 Django와 함께 작업 해 왔습니다)의 초보자입니다. 기존 데이터베이스 데이터베이스의 3 가지 테이블에 쓰는 PostgreSQL 함수를 호출해야합니다. 이것은 제 통제에서 벗어났습니다 (단지 작동하게해야합니다). 이 함수는 결과에 대한 정보가있는 레코드 (사용자 정의 Postgres 유형)를 반환합니다. 다음은 코드입니다.플라스크의 PostgreSQL 함수에서 트랜잭션 커밋하기
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
...
retval = db.engine.execute(
'SELECT * FROM add_purchase(%s, %s, %s, %s, %s, %s, %s);',
clean_data.account_id, amount, tax, deposit, clean_data.pos_id,
g.token_id, clean_data.external_reference_id).first()
app.logger.info(retval) # for debugging
db.session.commit()
위의 코드는 오류없이 실행됩니다. 로그 메시지에서 올바른 데이터가 데이터베이스에서 반환되는 것을 볼 수 있습니다. 그러나 psql에 가면 새로 삽입 된 데이터를 볼 수 없습니다. 트랜잭션이 실제로 커밋되지 않는 것 같습니다.
찾을 수있는 대부분의 설명서와 예제는 SQLAlchemy의 ORM을 사용하는 것을 기반으로합니다. 여기서 내가 뭘 잘못하고 있니?
스택 정보 :
from sqlalchemy import exc
...
connection = db.engine.connect()
trans = connection.begin()
try:
retval = connection.execute(
'SELECT * FROM add_purchase(%s, %s, %s, %s, %s, %s, %s);',
clean_data.account_id, amount, tax, deposit,
clean_data.pos_id, g.token_id,
clean_data.external_reference_id).first()
except exc.SQLAlchemyError:
trans.rollback()
raise
else:
trans.commit()
그리고 : 여기, 그것을 작동하게하는 방법을 알아 낸
Flask==0.10.1
Flask-SQLAlchemy==1.0
psycopg2==2.5.2
Python 2.7.3
Postgresql 9.3
업데이트는 실제로 나를 위해 작동하는 샘플입니다 SQLAlchemy의 connect 메소드에서 코드를 검토했습니다. "connect()"호출이 풀에서 새로운 연결을 얻는 것처럼 보입니다. (디폴트로 size = 5로 설정된 것 같습니다. 적어도 적어도 5로 설정하지는 않습니다). 그래서, 거기에 많은 해가 있는지 확실하지 않습니다. 그러나 원래의 질문 작업에서 예제를 작성하여이 코드를 더 깨끗하게 만들 수있는 것처럼 보입니다. 나는 아직도 누군가가 나에게 그 일을하는 방법을 알려주기를 바라고있다.
답장을 보내 주셔서 감사합니다. 나는 정확한 코드를 썼다. 그리고 그것은 transacton을 커밋하지 않는다. 오류를 발생시키지 않습니다. –
흠. 그렇다면 add_purchase는 어떻게 작동합니까? 그 코드가 있습니까? 그게 도움이 될 수도 ... – Moritz
예; 원래 질문을 참조하십시오. "위의 코드는 오류없이 실행됩니다. 로그 메시지에서 올바른 데이터가 데이터베이스에서 반환되는 것을 볼 수 있습니다." –