如何在SQLAlchemy中为MySQL SET设置server_default?

时间:2016-05-12 23:50:56

标签: python mysql sqlalchemy

我有一个MySQL设置列,我描述了使用sqlalchemy.dialects.mysql.SET,我想将server_default arg设置为包含两个值的集合。我正在寻找这样的事情:

from sqlalchemy.dialects.mysql import SET
class MyTable(Model):
    letters = Column(SET('a', 'b', 'c', 'd', 'e'), server_default=['a','b'])

如果我尝试上述简单的事情,我会得到:

Argument 'arg' is expected to be one of type '<class 'str'>' or '<class 'sqlalchemy.sql.elements.ClauseElement'>' or '<class 'sqlalchemy.sql.elements.TextClause'>', got '<class 'list'>'

有什么地方我可以找到我可以使用的ClauseElements列表吗?

1 个答案:

答案 0 :(得分:1)

对于不同的ClauseElement,最好的参考可能是"Column Elements and Expressions"

从阅读"The SET Type"看来,将值传递给MySQL中的SET列的常用方法是使用带有逗号分隔值的(SQL)字符串文字。一种方法是使用SQLAlchemy的literal(),它产生一个合适的绑定参数。然后你会传递一个像这样的文字字符串:

from sqlalchemy import literal
from sqlalchemy.dialects.mysql import SET

class MyTable(Model):

    letters = Column(SET('a', 'b', 'c', 'd', 'e'), server_default=literal('a,b'))