如何使用SQL Alchemy在SQL Server中创建图形节点表?

问题描述

我正在尝试使用sqlAlchemy在sql Server中创建图形表。

sql将如下所示:

CREATE TABLE [audit].[tableMetaData](
      [_tableMetaDataId] INT PRIMARY KEY IDENTITY(1,1),[table] VARCHAR(200),[createdDateTime] DATETIME,[loadType] VARCHAR(200),[loadBy] VARCHAR(200),[description] VARCHAR(MAX),) AS NODE;

我可以使用以下方法使用sql Alchemy创建标准表:

auditMeta = MetaData()
tableMetaData = Table(
    'tableMetaData',auditMeta,Column('_tableMetaDataId',INTEGER,primary_key = True),Column('table',VARCHAR(200)),Column('createdDateTime',DATETIME),Column('loadType',Column('loadBy',Column('description',VARCHAR(None)),schema = auditSchema
)

auditMeta.create_all(auditEngine)

如何将“ AS NODE”组件添加sql Alchemy代码中,以使sql Server知道这是一个Graph表?

非常感谢您的帮助。

解决方法

您可以更改CreateTable构造的默认编译方式

from sqlalchemy.schema import CreateTable
from sqlalchemy.ext.compiler import compiles


auditMeta = MetaData()
tableMetaData = Table(
    'tableMetaData',auditMeta,Column('_tableMetaDataId',INTEGER,primary_key = True),Column('table',VARCHAR(200)),Column('createdDateTime',DATETIME),Column('loadType',Column('loadBy',Column('description',VARCHAR(None)),schema = auditSchema,info={'as_node': True}
)


@compiles(CreateTable)
def create_as_node(create_table,compiler,**kw):
    if create_table.element.info.get('as_node'):
        compiler.post_create_table = lambda x: ' AS NODE'
    return compiler.visit_create_table(create_table,**kw)


auditMeta.create_all(auditEngine)

Custom SQL Constructs and Compilation Extension中查看更多