能否通过关键字参数向SQLAlchemy Index构造函数传入列名创建索引?
SQLAlchemy Index构造函数的关键字参数用法
可以通过关键字参数指定列来创建索引提升可读性,但你之前的参数名用错了,以下是正确的用法说明:
1. 通用正确写法:使用columns参数
SQLAlchemy的Index构造函数支持用columns关键字参数传入列名(字符串)或列对象,这是跨数据库通用的写法,不会触发方言错误:
__table_args__ = ( Index(name="scanner_id", columns=["scanner_id"]), Index(name="scanner_id_source_id", columns=["scanner_id", "source_id"], unique=True), # 其他索引... )
2. 你的报错原因解析
expressions参数报错:Index构造函数没有这个通用参数,这不是合法的关键字参数,因此触发类型错误。mysql_columns参数报错:MySQL方言并未为Index提供该参数,只有少数方言特定的索引配置参数需要加mysql_前缀(比如指定索引类型的mysql_using),列的指定始终用通用的columns参数。
3. 更严谨的写法:直接引用列对象
如果想避免字符串列名的拼写错误,可以直接引用类中的列对象,但由于是在类内部定义索引,需要用lambda延迟加载(避免类未初始化完成的问题):
__table_args__ = ( Index(name="scanner_id", columns=[lambda: Pages.scanner_id]), Index(name="scanner_id_source_id", columns=[lambda: Pages.scanner_id, lambda: Pages.source_id], unique=True), )
内容的提问来源于stack exchange,提问作者neurocker
相关产品推荐
相关产品推荐

