Saqib Ali Saqib Ali - 1 year ago 181
Python Question

Why am I getting SQLAlchemy Error "__table_args__ value must be a tuple, dict, or None"

I have the following SQLAlchemy Model. It has been successfully migrated to the database:

class MyClassA(db.Model, Timestamp):
a_id = db.Column(db.Integer, nullable=False, primary_key=True)
b_id = db.Column(db.Integer, db.ForeignKey(C.c_id), nullable=False)
d = db.Column(db.String(1024))
e_id = db.Column(db.Integer,

Now I want to add a uniqueness constraint across the second and fourth fields. So I add the following line to the model:

__table_args__ = db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid')

But now when I try to migrate it, I get the following error:

sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None

Why am I getting this error? And how can I fix it? I tried putting the right side of the equation in parenthesis, but that didn't fix it.

Answer Source

table_args is supposed to be a tuple, dict, or None as the error code suggests. If you make it a tuple then you must put your value in parenthesis and also have a comma in there at the end:


     __table_args__ = (db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid'), )
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download