Python 为SQLAlchemy表提供自定义参数
我想使用SQLAlchemyPython 为SQLAlchemy表提供自定义参数,python,sqlalchemy,cockroachdb,Python,Sqlalchemy,Cockroachdb,我想使用SQLAlchemydeclarative_base中的CockroachDB列族。 我想我需要把这个添加到\uuu table\u args\uuuu,但我不知道如何添加 问题基本上是:是否可以提供自定义(底层方言不支持)选项以从SQLAlchemy创建表?一种可能是创建自定义编译扩展: from sqlalchemy.ext.compiler import compiles from sqlalchemy.schema import ColumnCollectionConstrain
declarative_base
中的CockroachDB列族。
我想我需要把这个添加到\uuu table\u args\uuuu
,但我不知道如何添加
问题基本上是:是否可以提供自定义(底层方言不支持)选项以从SQLAlchemy创建表?一种可能是创建自定义编译扩展:
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.schema import ColumnCollectionConstraint
from sqlalchemy.sql.elements import quoted_name
class Family(ColumnCollectionConstraint):
def __init__(self, name, *columns, **kwgs):
name = quoted_name(name, kwgs.pop("quote", None))
super().__init__(*columns, **kwgs)
self.name = name
@compiles(Family)
def compile_family(element, ddlcompiler, **kwgs):
name = ddlcompiler.preparer.quote(element.name)
columns = ", ".join([
ddlcompiler.sql_compiler.process(col, include_table=False, **kwgs)
for col in element.columns
])
return f"FAMILY {name} ({columns})"
随附扩展名,如下所示:
from sqlalchemy import Column, Integer
from sqlalchemy.schema import CreateTable
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Test(Base):
__tablename__ = 'test'
id = Column(Integer, primary_key=True)
x = Column(Integer)
__table_args__ = (Family('xs', x),)
print(CreateTable(Test.__table__))
产出:
创建表测试(
id整数不为空,
x整数,
主键(id),
家庭xs(x)
)