SQLAlchemy (1.1.0b3) 및 Postgres를 사용하여 Flask 응용 프로그램을 실행 중입니다.일시적으로 SQLAlchemy의 증가를 비활성화하십시오.
Flask를 사용하면 클라이언트가 유형 데이터베이스의 모든 인스턴스를 가져 와서 Flask 응용 프로그램의 깨끗한 버전에서 다시 로컬 클라이언트로 가져올 수있는 API를 제공합니다. 클라이언트가 다시 게시하면 다시 다운로드 할 때와 동일한 ID를 가져야합니다.
정상적인 작동을 위해 기본 키에 대한 "증가"옵션을 사용하지 않으려 고하지만 클라이언트가 POST로 ID를 제공하고 새 자원에 ID를 제공하고자한다면이를 깨지 않고 적절히 설정하려고합니다 SQLAlchemy. 현재 ID의 최대 값에 액세스하거나 재설정하려면 어떻게합니까?
@app.route('/objects', methods = ['POST'])
def post_object():
if 'id' in request.json and MyObject.query.get(request.json['id']) is None: #1
object = MyObject()
object.id = request.json['id']
else: #2
object = MyObject()
object.fillFromJson(request.json)
db.session.add(object)
db.session.commit()
return jsonify(object.toDict()),201
의 ID #1
와 함께 개체의 무리를 추가하고 다음 ID없이 또는 사용 ID #2
로에 추가하려고, 내가 얻을.
duplicate key value violates unique constraint "object_pkey"
DETAIL: Key (id)=(2) already exists.
일반적으로 ID는 incrementally을 생성하지만 ID가 이미 사용하는 경우, 그에 대한 확인이 없습니다. 자동 증가와 INSERT 사이에 어떻게 갈 수 있습니까?
어떤 문제가 있습니까? Postgres를 사용하면 삽입하는 동안 기본 키 값을 설정할 수 있습니다. – dirn
'session.add (object)'처럼 보입니다.'object'는 id가 없으므로 id가없는'session.add (object)'가 마지막으로 호출 된 시간보다 더 큰 객체에 id를 제공합니다. –
하지만 ID를 사용하고 싶다면 세션에 추가하기 전에 객체에 할당하지 않는 이유는 무엇입니까? – dirn