2013-06-24 3 views
4

SQLAlchemy, alembic 및 postgres를 사용하면 열 생성 시간에 열을 설정하려고 할 때 마침내 얻을 수있는 필드가 테이블 자체 일 때의 필드입니다 행이 생성 된 시간 대신에 생성되었습니다.필드 기본 타임 스탬프가 행 생성 시간 대신 테이블 생성 시간으로 설정되었습니다.

모델 코드 : 기본값은 행이라고 내가 그렇게해야합니까

datetime | timestamp without time zone | not null default '2013-06-24 11:28:14.930524'::timestamp without time zone 

:

sa.Column('datetime', sa.DateTime(), server_default='now()', nullable=False), 

그리고 포스트 그레스의 열 :

datetime = sa.Column(sa.DateTime, nullable=False, server_default=func.now()) 

증류기가로 변환 창조 시간?

+0

대신 올바른 대답을 제출하십시오.'server_default = func.now() 대신'server_default = func.now'를 사용해도 될까요? – Doobeh

+0

@Doobeh : 나는 그것을 생각했다. 그리고 그것은 의도했던 것이 가치가 아닌 함수라는 점에서 의미가 있지만, 함수를 호출하는 것이 SQLAlchemy에서하는 방법이라고 생각된다. sqlalchemy.exc.ArgumentError : 'arg'유형이 ''또는 ''또는 ''중 하나가 될 것으로 예상됩니다. class 'sqlalchemy.sql.expression.TextClause'> ','got '' –

+1

어둠 속에서 약간의 장면이 있었고,'default = datetime .now'라고 적혀 있습니다. 내가 답으로 남길 server_default를 사용하여 해결책을 발견했다. – Doobeh

답변

8

아하, 당신은 DBMS 자체에서 실행해야 할 몇 가지 SQL에 보내는 경우가 server_default 명령을 말할 필요가 보인다해서 돌출을했다 :

from sqlalchemy import text 

class Test(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    created = db.Column(db.DateTime, server_default=text('now()')) 

생성하는 :

CREATE TABLE test (
    id SERIAL NOT NULL, 
    created TIMESTAMP WITHOUT TIME ZONE DEFAULT now(), 
    PRIMARY KEY (id) 
) 
+0

고마워, 나중에 그걸 시도해 볼게. 하지만 이것은 Postgres에서만 가능합니다. 맞습니까? –

+0

그냥 '이봐 요,이 비트를 처리하지 마시고 그냥이 열의 SQL DDL에 추가하십시오.'라는 질문이 없습니다. DBMS가,'NOW()'대신에'OMG_RIGHT_NOW()'를 사용한다면, 그것을 조정할 필요가 있습니다. – Doobeh