Как прочитать имена таблиц из файла MySQL, содержащего ключевое слово разделения с помощью SQLGlot?MySql

Форум по Mysql
Ответить
Anonymous
 Как прочитать имена таблиц из файла MySQL, содержащего ключевое слово разделения с помощью SQLGlot?

Сообщение Anonymous »

Я пытаюсь прочитать mysql sql файл, содержащий раздел . Я получаю приведенную ниже ошибку < /p>

Код: Выделить всё

2025-08-20 13:51:33,923 [ERROR] Error parsing `changeLogs/health-service/create_db.sql`: Expecting ).  Line 19, Col: 26.
created_at`) USING BTREE
) PARTITION BY RANGE ( UNIX_TIMESTAMP(audit_ts)) (
PARTITION p2401 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01 00:00:00')),
PARTITION p2402 VALUES LESS THAN (UNIX_TIMES
2025-08-20 13:51:33,923 [INFO] Total unique tables found: 0
2025-08-20 13:51:33,923 [INFO] Table names: []
< /code>
Мой код питона похож на ниже < /p>
import logging
import sqlglot
from sqlglot import exp

# Configure logger
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
logger = logging.getLogger(__name__)

def extract_table_names(sql_file_path, dialect="mysql"):
"""
Parse the SQL file and return a set of unique table names found.
Logs errors if file not found or parsing fails.
"""
try:
with open(sql_file_path, "r") as f:
sql_script = f.read()

expression_trees = sqlglot.parse(sql_script, dialect=dialect)
table_names = set()
for tree in expression_trees:
table_names.update([table.name for table in tree.find_all(exp.Table)])
return table_names
except FileNotFoundError:
logger.error(f"File not found: {sql_file_path}")
return set()
except Exception as e:
logger.error(f"Error parsing `{sql_file_path}`: {e}")
return set()

if __name__ == "__main__":
sql_file = "changeLogs/health-service/create_db.sql"
tables = extract_table_names(sql_file)

logger.info(f"Total unique tables found: {len(tables)}")
logger.info(f"Table names:  {sorted(list(tables))}")
< /code>
Мой файл SQL похож на ниже < /p>
-- liquibase formatted sql

-- changeset debraj.manna@nexla.com:NEX-18235
CREATE TABLE IF NOT EXISTS `audit_control`
(
`id`            BIGINT auto_increment NOT NULL,
`message_id`    VARCHAR(100) DEFAULT NULL,
`resource_type` VARCHAR(30) NOT NULL,
`event_type`    VARCHAR(30) NOT NULL,
`resource_id`   INT NOT NULL,
`origin`        VARCHAR(100) NOT NULL,
`created_at`    TIMESTAMP NOT NULL,
`body`          mediumtext NOT NULL,
`audit_ts`      TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, audit_ts),
KEY `audit_control_resource_type_resource_id_IDX` (`resource_type`,`resource_id`) USING BTREE,
KEY `audit_control_created_at_IDX` (`created_at`) USING BTREE
) PARTITION BY RANGE ( UNIX_TIMESTAMP(audit_ts)) (
PARTITION p2401 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01 00:00:00')),
PARTITION p2402 VALUES LESS THAN (UNIX_TIMESTAMP('2024-03-01 00:00:00')),
PARTITION p2403 VALUES LESS THAN (UNIX_TIMESTAMP('2024-04-01 00:00:00')),
PARTITION p2404 VALUES LESS THAN (UNIX_TIMESTAMP('2024-05-01 00:00:00')),
PARTITION p2405 VALUES LESS THAN (UNIX_TIMESTAMP('2024-06-01 00:00:00')),
PARTITION p2406 VALUES LESS THAN (UNIX_TIMESTAMP('2024-07-01 00:00:00')),
PARTITION p2407 VALUES LESS THAN (UNIX_TIMESTAMP('2024-08-01 00:00:00')),
PARTITION p2408 VALUES LESS THAN (UNIX_TIMESTAMP('2024-09-01 00:00:00')),
PARTITION p2409 VALUES LESS THAN (UNIX_TIMESTAMP('2024-10-01 00:00:00')),
PARTITION p2410 VALUES LESS THAN (UNIX_TIMESTAMP('2024-11-01 00:00:00')),
PARTITION p2411 VALUES LESS THAN (UNIX_TIMESTAMP('2024-12-01 00:00:00')),
PARTITION p2412 VALUES LESS THAN (UNIX_TIMESTAMP('2025-01-01 00:00:00')),
PARTITION pN VALUES LESS THAN MAXVALUE
);

CREATE TABLE IF NOT EXISTS `audit_coordination`
(
`id`         BIGINT auto_increment NOT NULL,
`message_id` VARCHAR(100) DEFAULT NULL,
`event_type` VARCHAR(30) NOT NULL,
`created_at` TIMESTAMP NOT NULL,
`body`       TEXT NOT NULL,
`audit_ts`   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, audit_ts)
) PARTITION BY RANGE ( UNIX_TIMESTAMP(audit_ts)) (
PARTITION p2401 VALUES LESS THAN (UNIX_TIMESTAMP('2024-02-01 00:00:00')),
PARTITION p2402 VALUES LESS THAN (UNIX_TIMESTAMP('2024-03-01 00:00:00')),
PARTITION p2403 VALUES LESS THAN (UNIX_TIMESTAMP('2024-04-01 00:00:00')),
PARTITION p2404 VALUES LESS THAN (UNIX_TIMESTAMP('2024-05-01 00:00:00')),
PARTITION p2405 VALUES LESS THAN (UNIX_TIMESTAMP('2024-06-01 00:00:00')),
PARTITION p2406 VALUES LESS THAN (UNIX_TIMESTAMP('2024-07-01 00:00:00')),
PARTITION p2407 VALUES LESS THAN (UNIX_TIMESTAMP('2024-08-01 00:00:00')),
PARTITION p2408 VALUES LESS THAN (UNIX_TIMESTAMP('2024-09-01 00:00:00')),
PARTITION p2409 VALUES LESS THAN (UNIX_TIMESTAMP('2024-10-01 00:00:00')),
PARTITION p2410 VALUES LESS THAN (UNIX_TIMESTAMP('2024-11-01 00:00:00')),
PARTITION p2411 VALUES LESS THAN (UNIX_TIMESTAMP('2024-12-01 00:00:00')),
PARTITION p2412 VALUES LESS THAN (UNIX_TIMESTAMP('2025-01-01 00:00:00')),
PARTITION pN VALUES LESS THAN MAXVALUE
);
может кто -нибудь сообщить мне, если это ожидается, и sqlglot не поддерживает раздел ?
  • sqlglot = 27.8.0
  • python = 3.9.6
>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -using-sql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»