Разобрать параметр DEFAULT оператора ddl с помощью ddlparse - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь разобрать оператор ddl, используя ddlparse. Я могу проанализировать все поля, кроме параметра по умолчанию. Я пошел по ссылке ниже. https://github.com/shinichi-takii/ddlparse

Ниже указан ddl, который я пытаюсь проанализировать.

sample_ddl = """
CREATE TABLE My_Schema.Sample_Table (
  Id integer PRIMARY KEY ,
  Name varchar(100) NOT NULL DEFAULT 'BASANT',
  Total bigint NOT NULL DEFAULT 1 ,
  Avg decimal(5,1) NOT NULL,
  Created_At date, -- Oracle 'DATE' -> BigQuery 'DATETIME'
  UNIQUE (NAME)
);
"""

Я могу извлечь всю информацию, кроме параметра DEFAULT, с помощью код ниже:

for col in table.columns.values():
    col_info = []
    col_info.append("name = {}".format(col.name))
    col_info.append("data_type = {}".format(col.data_type))
    col_info.append("length = {}".format(col.length))
    col_info.append("precision(=length) = {}".format(col.precision))
    col_info.append("scale = {}".format(col.scale))
    col_info.append("constraint = {}".format(col.constraint))
    col_info.append("not_null = {}".format(col.not_null))
    col_info.append("PK = {}".format(col.primary_key))
    col_info.append("unique = {}".format(col.unique))
    col_info.append("bq_legacy_data_type = {}".format(col.bigquery_legacy_data_type))
    col_info.append("bq_standard_data_type = {}".format(col.bigquery_standard_data_type))
    col_info.append("comment = '{}'".format(col.comment))
    col_info.append("description(=comment) = '{}'".format(col.description))
    col_info.append("BQ {}".format(col.to_bigquery_field()))
    print(" : ".join(col_info))

Может кто-нибудь помочь мне, как получить значение для параметра по умолчанию?

1 Ответ

0 голосов
/ 20 апреля 2020

Ограничение по умолчанию вашего PRIMARY KEY не имеет большого смысла. В контексте SQL Server вы можете создать следующее ограничение по умолчанию, но оно не будет работать:

DROP TABLE IF EXISTS dbo.Sample_Table

CREATE TABLE dbo.Sample_Table (
  Id integer PRIMARY KEY DEFAULT 'BASANT',
  Name varchar(100) NOT NULL, --COMMENT 'User name',

);

INSERT INTO dbo.Sample_Table (Name)
VALUES ('x')

Сообщение 245, Уровень 16, Состояние 1, Строка 9 Преобразование не удалось при преобразовании значения varchar 'BASANT' для типа данных int.

Почему? Потому что вы не можете установить значение по умолчанию string для целочисленного столбца.

И событие, если вы сказали, что это число:

DROP TABLE IF EXISTS dbo.Sample_Table

CREATE TABLE dbo.Sample_Table (
  Id integer PRIMARY KEY DEFAULT 1,
  Name varchar(100) NOT NULL, --COMMENT 'User name',

);

INSERT INTO dbo.Sample_Table (Name)
VALUES ('x');

INSERT INTO dbo.Sample_Table (Name)
VALUES ('x');

Это будет работать только первый раз, второй вы получите:

Сообщение 2627, уровень 14, состояние 1, строка 23 Нарушение ограничения PRIMARY KEY 'PK__Sample_T__3214EC0759729E5E'. Невозможно вставить дубликат ключа в объект 'dbo.Sample_Table'. Значение дубликата ключа (1).

, поскольку значение первичного ключа должно быть уникальным. Вы можете искать что-то вроде этого:

ID INTEGER PRIMARY KEY IDENTITY(1,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...