I'm creating my database tables inside a flask application via SQLAlchemy. According to this answer, my code should look like this:

id = db.Column(db.CHAR(36), primary_key=True, server_default=str("uuid_generate_v4()"))

which, after migrations and upgrades are done, its definition on the database looks like this:

 id character(36) COLLATE pg_catalog."default" NOT NULL DEFAULT 'uuid_generate_v4()'::bpchar,

Is this the correct way of specifying a UUID default value in PSQL?

  • 1
    Your datatype should be UUID, not CHAR(36). Have a look at the uuid-ossp extension. That's assuming SQLAlchemy support the UUID datatype of course. – bma Nov 14 '17 at 21:58
  • 1
    Also I'm not sure about the str(..). I think it should be server_default=sqlalchemy.text("uuid_generate_v4()") or just server_default="uuid_generate_v4()" – ypercubeᵀᴹ Nov 14 '17 at 22:00
  • yea, I agree with @ypercubeᵀᴹ. I think there is a problem with that. – Evan Carroll Nov 14 '17 at 22:20
  • Yes, the server_default=sqlalchemy.text(...) is needed. Otherwise sqlalchemy thinks you want to have a string constant as the default. – ypercubeᵀᴹ Nov 14 '17 at 22:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.