PgGraph ಎನ್ನುವುದು PostgreSQL ನಲ್ಲಿ ಟೇಬಲ್ ಅವಲಂಬನೆಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಲು ಮತ್ತು ಹುಡುಕಲು ಒಂದು ಉಪಯುಕ್ತತೆಯಾಗಿದೆ

PgGraph ಎನ್ನುವುದು PostgreSQL ನಲ್ಲಿ ಟೇಬಲ್ ಅವಲಂಬನೆಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಲು ಮತ್ತು ಹುಡುಕಲು ಒಂದು ಉಪಯುಕ್ತತೆಯಾಗಿದೆ
PostgreSQL DBMS ನಲ್ಲಿ ಟೇಬಲ್ ಅವಲಂಬನೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಪೈಥಾನ್‌ನಲ್ಲಿ ಬರೆಯಲಾದ ಉಪಯುಕ್ತತೆಯನ್ನು ಇಂದು ನಾನು Habr ಓದುಗರಿಗೆ ಪ್ರಸ್ತುತಪಡಿಸಲು ಬಯಸುತ್ತೇನೆ.

ಉಪಯುಕ್ತತೆಯ API ಸರಳವಾಗಿದೆ ಮತ್ತು ಮೂರು ವಿಧಾನಗಳನ್ನು ಒಳಗೊಂಡಿದೆ:

  • ಆರ್ಕೈವ್_ಟೇಬಲ್ - ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪ್ರಾಥಮಿಕ ಕೀಲಿಗಳೊಂದಿಗೆ ಮರುಕಳಿಸುವ ಆರ್ಕೈವಿಂಗ್/ಅಳಿಸುವಿಕೆ ಸಾಲುಗಳು
  • ಪಡೆಯಿರಿ_ಟೇಬಲ್_ಉಲ್ಲೇಖಗಳು - ಟೇಬಲ್‌ಗಾಗಿ ಅವಲಂಬನೆಗಳಿಗಾಗಿ ಹುಡುಕಿ (ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಮತ್ತು ಅದನ್ನು ಉಲ್ಲೇಖಿಸಿದವರು ಉಲ್ಲೇಖಿಸಿದ ಕೋಷ್ಟಕಗಳನ್ನು ತೋರಿಸುತ್ತದೆ)
  • ಸಾಲು_ಉಲ್ಲೇಖಗಳನ್ನು ಪಡೆಯಿರಿ - ಬಯಸಿದ ಕೋಷ್ಟಕದಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಸಾಲುಗಳನ್ನು ಉಲ್ಲೇಖಿಸುವ ಇತರ ಕೋಷ್ಟಕಗಳಲ್ಲಿನ ಸಾಲುಗಳಿಗಾಗಿ ಹುಡುಕಿ

ಪೂರ್ವೇತಿಹಾಸದ

ನನ್ನ ಹೆಸರು ಒಲೆಗ್ ಬೊರ್ಜೋವ್, ನಾನು ಡೊಮ್‌ಕ್ಲಿಕ್‌ನಲ್ಲಿ ಅಡಮಾನ ಸಾಲ ನಿರ್ವಾಹಕರಿಗೆ CRM ತಂಡದಲ್ಲಿ ಡೆವಲಪರ್ ಆಗಿದ್ದೇನೆ.

ನಮ್ಮ CRM ಸಿಸ್ಟಮ್‌ನ ಮುಖ್ಯ ಡೇಟಾಬೇಸ್ ಕಂಪನಿಯಲ್ಲಿನ ಪರಿಮಾಣದ ವಿಷಯದಲ್ಲಿ ದೊಡ್ಡದಾಗಿದೆ. ಇದು ಅತ್ಯಂತ ಹಳೆಯದಾಗಿದೆ: ಇದು ಯೋಜನೆಯ ಪ್ರಾರಂಭದಲ್ಲಿ ಕಾಣಿಸಿಕೊಂಡಿತು, ಮರಗಳು ದೊಡ್ಡದಾಗಿದ್ದಾಗ, ಡೊಮ್ಕ್ಲಿಕ್ ಪ್ರಾರಂಭಿಕವಾಗಿತ್ತು ಮತ್ತು ಫ್ಯಾಶನ್ ಪೈಥಾನ್ ಅಸಮಕಾಲಿಕ ಚೌಕಟ್ಟಿನಲ್ಲಿ ಮೈಕ್ರೋ ಸರ್ವಿಸ್ ಬದಲಿಗೆ PHP ಯಲ್ಲಿ ದೊಡ್ಡ ಏಕಶಿಲೆ ಇತ್ತು.

PHP ಯಿಂದ ಪೈಥಾನ್‌ಗೆ ಪರಿವರ್ತನೆಯು ಬಹಳ ಉದ್ದವಾಗಿದೆ ಮತ್ತು ಎರಡೂ ಸಿಸ್ಟಮ್‌ಗಳ ಏಕಕಾಲಿಕ ಬೆಂಬಲದ ಅಗತ್ಯವಿತ್ತು, ಇದು ಡೇಟಾಬೇಸ್‌ನ ವಿನ್ಯಾಸದ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಿತು.

ಪರಿಣಾಮವಾಗಿ, ನಾವು ವಿವಿಧ ರೀತಿಯ ಪ್ರಶ್ನೆಗಳಿಗೆ ಸೂಚ್ಯಂಕಗಳ ಗುಂಪಿನೊಂದಿಗೆ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಹೆಚ್ಚು ಸಂಪರ್ಕಿತ ಮತ್ತು ಬೃಹತ್ ಕೋಷ್ಟಕಗಳೊಂದಿಗೆ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಇವೆಲ್ಲವೂ ಡೇಟಾಬೇಸ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಋಣಾತ್ಮಕವಾಗಿ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ: ದೊಡ್ಡ ಕೋಷ್ಟಕಗಳು ಮತ್ತು ಅವುಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳ ಗುಂಪಿನಿಂದಾಗಿ, ಪ್ರಶ್ನೆಗಳ ಸಂಕೀರ್ಣತೆಯು ನಿರಂತರವಾಗಿ ಹೆಚ್ಚುತ್ತಿದೆ, ಇದು ಹೆಚ್ಚು ಲೋಡ್ ಮಾಡಲಾದ ಕೋಷ್ಟಕಗಳಿಗೆ ವಿಶೇಷವಾಗಿ ನಿರ್ಣಾಯಕವಾಗಿದೆ.

ಡೇಟಾಬೇಸ್‌ನಲ್ಲಿನ ಲೋಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು, ಹಳೆಯ ದಾಖಲೆಗಳನ್ನು ಹೆಚ್ಚು ದೊಡ್ಡದಾದ ಮತ್ತು ಲೋಡ್ ಮಾಡಲಾದ ಕೋಷ್ಟಕಗಳಿಂದ ಆರ್ಕೈವ್ ಮಾಡಿದವುಗಳಿಗೆ ವರ್ಗಾಯಿಸುವ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಬರೆಯಲು ನಾವು ನಿರ್ಧರಿಸಿದ್ದೇವೆ (ಉದಾಹರಣೆಗೆ, ಇಂದ task в task_archive).

ಕೋಷ್ಟಕಗಳ ನಡುವಿನ ದೊಡ್ಡ ಸಂಖ್ಯೆಯ ಸಂಬಂಧಗಳಿಂದ ಈ ಕಾರ್ಯವು ಜಟಿಲವಾಗಿದೆ: ಸರಳವಾಗಿ ಸಾಲುಗಳನ್ನು ಸರಿಸಿ task в task_archive ಸಾಕಾಗುವುದಿಲ್ಲ, ಅದಕ್ಕೂ ಮೊದಲು ನೀವು ಎಲ್ಲಾ ಉಲ್ಲೇಖಗಳೊಂದಿಗೆ ಪುನರಾವರ್ತಿತವಾಗಿ ಮಾಡಬೇಕಾಗಿದೆ task ಕೋಷ್ಟಕಗಳು.

ನಾನು ಉದಾಹರಣೆಯೊಂದಿಗೆ ಪ್ರದರ್ಶಿಸುತ್ತೇನೆ postgrespro.ru ಸೈಟ್‌ನಿಂದ ಡೆಮೊ ಡೇಟಾಬೇಸ್:

PgGraph ಎನ್ನುವುದು PostgreSQL ನಲ್ಲಿ ಟೇಬಲ್ ಅವಲಂಬನೆಗಳನ್ನು ಆರ್ಕೈವ್ ಮಾಡಲು ಮತ್ತು ಹುಡುಕಲು ಒಂದು ಉಪಯುಕ್ತತೆಯಾಗಿದೆ
ನಾವು ಟೇಬಲ್‌ನಿಂದ ದಾಖಲೆಗಳನ್ನು ಅಳಿಸಬೇಕಾಗಿದೆ ಎಂದು ಹೇಳೋಣ Flights. ಪೋಸ್ಟ್‌ಗ್ರೆಸ್ ನಮಗೆ ಹಾಗೆ ಮಾಡಲು ಅನುಮತಿಸುವುದಿಲ್ಲ: ನಾವು ಮೊದಲು ಎಲ್ಲಾ ರೆಫರೆನ್ಸಿಂಗ್ ಟೇಬಲ್‌ಗಳಿಂದ ದಾಖಲೆಗಳನ್ನು ಅಳಿಸಬೇಕಾಗಿದೆ, ಮತ್ತು ಯಾರಿಂದಲೂ ಉಲ್ಲೇಖಿಸದ ಕೋಷ್ಟಕಗಳಿಗೆ ಪುನರಾವರ್ತಿತವಾಗಿ ಕೆಳಗೆ.

ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ Flights ಸೂಚಿಸುತ್ತದೆ Ticket_flights, ಮತ್ತು ಅವಳ ಮೇಲೆ - Boarding_passes.

ಆದ್ದರಿಂದ, ನೀವು ಈ ಕ್ರಮದಲ್ಲಿ ಅದನ್ನು ಅಳಿಸಬೇಕಾಗಿದೆ:

  1. ನಾವು ಪ್ರಾಥಮಿಕ ಕೀಗಳ (PK) ಸಾಲುಗಳ ಮೌಲ್ಯಗಳನ್ನು ಪಡೆಯುತ್ತೇವೆ Ticket_flights, ಇದು ಅಳಿಸಬೇಕಾದ ಸಾಲುಗಳನ್ನು ಉಲ್ಲೇಖಿಸುತ್ತದೆ Flights.
  2. ನಾವು PK ಸಾಲುಗಳನ್ನು ಪಡೆಯುತ್ತೇವೆ Boarding_passes, ಇದು ಉಲ್ಲೇಖಿಸುತ್ತದೆ Ticket_flights.
  3. ನಾವು ಕೋಷ್ಟಕದಲ್ಲಿ ಹಂತ 2 ರಿಂದ PK ಮೂಲಕ ಸಾಲುಗಳನ್ನು ಅಳಿಸುತ್ತೇವೆ Boarding_passes.
  4. ಹಂತ 1 ರಲ್ಲಿ PK ಮೂಲಕ ಸಾಲುಗಳನ್ನು ಅಳಿಸಿ Ticket_flights.
  5. ನಿಂದ ಸಾಲುಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತಿದೆ Flights.

ಫಲಿತಾಂಶವು PgGraph ಎಂಬ ಉಪಯುಕ್ತತೆಯಾಗಿದೆ, ಅದನ್ನು ನಾವು ಮುಕ್ತ ಮೂಲವನ್ನು ಮಾಡಲು ನಿರ್ಧರಿಸಿದ್ದೇವೆ.

ಹೇಗೆ ಬಳಸುವುದು

ಉಪಯುಕ್ತತೆಯು ಎರಡು ಬಳಕೆಯ ವಿಧಾನಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ:

  • ಆಜ್ಞಾ ಸಾಲಿನಿಂದ ಕರೆ ಮಾಡಿ (pggraph …).
  • ಪೈಥಾನ್ ಕೋಡ್‌ನಲ್ಲಿ ಬಳಕೆ (ವರ್ಗ PgGraphApi).

ಸ್ಥಾಪನೆ ಮತ್ತು ಸಂರಚನೆ

ಮೊದಲು ನೀವು ಪೈಪಿ ರೆಪೊಸಿಟರಿಯಿಂದ ಉಪಯುಕ್ತತೆಯನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗಿದೆ:

pip3 install pggraph

ನಂತರ ಡೇಟಾಬೇಸ್ ಮತ್ತು ಆರ್ಕೈವಿಂಗ್ ಸ್ಕ್ರಿಪ್ಟ್‌ನ ಕಾನ್ಫಿಗರೇಶನ್‌ನೊಂದಿಗೆ ಸ್ಥಳೀಯ ಗಣಕದಲ್ಲಿ config.ini ಫೈಲ್ ಅನ್ನು ರಚಿಸಿ:

[db]
host = localhost
port = 5432
user = postgres
password = postgres
dbname = postgres
schema = public ; Необязательный параметр, указано значение по умолчанию

[archive]  ; Данный раздел заполнять необязательно, ниже указаны значения по умолчанию
is_debug = false
chunk_size = 1000
max_depth = 20
to_archive = true
archive_suffix = 'archive'

ಕನ್ಸೋಲ್‌ನಿಂದ ರನ್ ಮಾಡಿ

ನಿಯತಾಂಕಗಳನ್ನು

$ pggraph -h
usage: pggraph action [-h] --table TABLE [--ids IDS] [--config_path CONFIG_PATH]
positional arguments:
  action        required action: archive_table, get_table_references, get_rows_references

optional arguments:
  -h, --help                    show this help message and exit
  --table TABLE                 table name
  --ids IDS                     primary key ids, separated by comma, e.g. 1,2,3
  --config_path CONFIG_PATH     path to config.ini
  --log_path LOG_PATH           path to log dir
  --log_level LOG_LEVEL         log level (debug, info, error)

ಸ್ಥಾನಿಕ ವಾದಗಳು:

  • action - ಅಗತ್ಯವಿರುವ ಕ್ರಮ: archive_table, get_table_references ಅಥವಾ get_rows_references.

ಹೆಸರಿಸಲಾದ ವಾದಗಳು:

  • --config_path - ಸಂರಚನಾ ಕಡತಕ್ಕೆ ಮಾರ್ಗ;
  • --table - ನೀವು ಕ್ರಿಯೆಯನ್ನು ಮಾಡಬೇಕಾದ ಟೇಬಲ್;
  • --ids - ಅಲ್ಪವಿರಾಮದಿಂದ ಪ್ರತ್ಯೇಕಿಸಲಾದ ಐಡಿ ಪಟ್ಟಿ, ಉದಾಹರಣೆಗೆ, 1,2,3 (ಐಚ್ಛಿಕ ನಿಯತಾಂಕ);
  • --log_path - ಲಾಗ್‌ಗಳಿಗಾಗಿ ಫೋಲ್ಡರ್‌ಗೆ ಮಾರ್ಗ (ಐಚ್ಛಿಕ ಪ್ಯಾರಾಮೀಟರ್, ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ - ಹೋಮ್ ಫೋಲ್ಡರ್);
  • --log_level — ಲಾಗಿಂಗ್ ಮಟ್ಟ (ಐಚ್ಛಿಕ ಪ್ಯಾರಾಮೀಟರ್, ಡೀಫಾಲ್ಟ್ ಮಾಹಿತಿಯಾಗಿದೆ).

ಆದೇಶ ಉದಾಹರಣೆಗಳು

ಟೇಬಲ್ ಆರ್ಕೈವ್ ಮಾಡಲಾಗುತ್ತಿದೆ

ಉಪಯುಕ್ತತೆಯ ಮುಖ್ಯ ಕಾರ್ಯವೆಂದರೆ ಡೇಟಾ ಆರ್ಕೈವಿಂಗ್, ಅಂದರೆ. ಮುಖ್ಯ ಕೋಷ್ಟಕದಿಂದ ಆರ್ಕೈವ್ ಟೇಬಲ್‌ಗೆ ಸಾಲುಗಳನ್ನು ವರ್ಗಾಯಿಸುವುದು (ಉದಾಹರಣೆಗೆ, ಟೇಬಲ್‌ನಿಂದ ಪುಸ್ತಕಗಳು в ಪುಸ್ತಕಗಳು_ಆರ್ಕೈವ್).

ಆರ್ಕೈವ್ ಮಾಡದೆಯೇ ಅಳಿಸುವಿಕೆಯನ್ನು ಸಹ ಬೆಂಬಲಿಸಲಾಗುತ್ತದೆ: ಇದಕ್ಕಾಗಿ ನೀವು ನಿಯತಾಂಕವನ್ನು config.ini ನಲ್ಲಿ ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ to_archive = ತಪ್ಪು).

ಅಗತ್ಯವಿರುವ ನಿಯತಾಂಕಗಳು - config_path, ಟೇಬಲ್ ಮತ್ತು ಐಡಿಗಳು.

ಪ್ರಾರಂಭದ ನಂತರ, ದಾಖಲೆಗಳನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ ids ಕೋಷ್ಟಕದಲ್ಲಿ table ಮತ್ತು ಅದನ್ನು ಉಲ್ಲೇಖಿಸುವ ಎಲ್ಲಾ ಕೋಷ್ಟಕಗಳಲ್ಲಿ.

$ pggraph archive_table --config_path config.hw.local.ini --table flights --ids 1,2,3
2020-06-20 19:27:44 INFO: flights - START
2020-06-20 19:27:44 INFO: flights - start archive_recursive 3 rows (depth=0)
2020-06-20 19:27:44 INFO:       START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:       ticket_flights - start archive_recursive 3 rows (depth=1)
2020-06-20 19:27:44 INFO:               START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:               boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO:                       START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:                       END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:               boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO:               boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO:                       START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:                       END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:               boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO:               boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO:                       START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:                       END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:               boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO:               boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO:                       START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:                       END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:               boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO:               END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO:       ticket_flights - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO:       END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: flights - archive_by_ids 3 rows by id
2020-06-20 19:27:44 INFO: flights - END

ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಕೋಷ್ಟಕಕ್ಕಾಗಿ ಅವಲಂಬನೆಗಳನ್ನು ಹುಡುಕಿ

ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಕೋಷ್ಟಕದ ಅವಲಂಬನೆಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವ ಕಾರ್ಯ table. ಅಗತ್ಯವಿರುವ ನಿಯತಾಂಕಗಳು - config_path и table.

ಪ್ರಾರಂಭದ ನಂತರ, ನಿಘಂಟನ್ನು ಪರದೆಯ ಮೇಲೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ, ಅಲ್ಲಿ:

  • in_refs - ಕೊಟ್ಟಿರುವ ಒಂದನ್ನು ಉಲ್ಲೇಖಿಸುವ ಕೋಷ್ಟಕಗಳ ನಿಘಂಟು, ಅಲ್ಲಿ ಕೀಲಿಯು ಮೇಜಿನ ಹೆಸರಾಗಿರುತ್ತದೆ, ಮೌಲ್ಯವು ವಿದೇಶಿ ಕೀ ವಸ್ತುಗಳ ಪಟ್ಟಿಯಾಗಿದೆ (pk_main - ಮುಖ್ಯ ಕೋಷ್ಟಕದಲ್ಲಿ ಪ್ರಾಥಮಿಕ ಕೀಲಿ, pk_ref - ಉಲ್ಲೇಖ ಕೋಷ್ಟಕದಲ್ಲಿ ಪ್ರಾಥಮಿಕ ಕೀಲಿ, fk_ref - ಮೂಲ ಕೋಷ್ಟಕಕ್ಕೆ ವಿದೇಶಿ ಕೀಲಿಯಾಗಿರುವ ಕಾಲಮ್‌ನ ಹೆಸರು);
  • out_refs - ಇದು ಉಲ್ಲೇಖಿಸುವ ಕೋಷ್ಟಕಗಳ ನಿಘಂಟು.

$ pggraph get_table_references --config_path config.hw.local.ini --table flights
{'in_refs': {'ticket_flights': [ForeignKey(pk_main='flight_id', pk_ref='ticket_no, flight_id', fk_ref='flight_id')]},
 'out_refs': {'aircrafts': [ForeignKey(pk_main='aircraft_code', pk_ref='flight_id', fk_ref='aircraft_code')],
              'airports': [ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='arrival_airport'),
                           ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='departure_airport')]}}

ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪ್ರಾಥಮಿಕ ಕೀಲಿಯೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್‌ಗಳಿಗೆ ಉಲ್ಲೇಖಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು

ವಿದೇಶಿ ಕೀ ಮೂಲಕ ಸಾಲುಗಳನ್ನು ಉಲ್ಲೇಖಿಸುವ ಇತರ ಕೋಷ್ಟಕಗಳಲ್ಲಿ ಸಾಲುಗಳನ್ನು ಹುಡುಕುವ ಕಾರ್ಯ ids ಕೋಷ್ಟಕಗಳು table. ಅಗತ್ಯವಿರುವ ನಿಯತಾಂಕಗಳು - config_path, table и ids.

ಪ್ರಾರಂಭದ ನಂತರ, ಈ ಕೆಳಗಿನ ರಚನೆಯೊಂದಿಗೆ ನಿಘಂಟನ್ನು ಪರದೆಯ ಮೇಲೆ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ:

{
	pk_id_1: {
		reffering_table_name_1: {
			foreign_key_1: [
				{row_pk_1: value, row_pk_2: value},
				...
			], 
			...
		},
		...
	},
	pk_id_2: {...},
	...
}

ಉದಾಹರಣೆ ಕರೆ:

$ pggraph get_rows_references --config_path config.hw.local.ini --table flights --ids 1,2,3
{1: {'ticket_flights': {'flight_id': [{'flight_id': 1,
                                       'ticket_no': '0005432816945'},
                                      {'flight_id': 1,
                                       'ticket_no': '0005432816941'}]}},
 2: {'ticket_flights': {'flight_id': [{'flight_id': 2,
                                       'ticket_no': '0005433101832'},
                                      {'flight_id': 2,
                                       'ticket_no': '0005433101864'},
                                      {'flight_id': 2,
                                       'ticket_no': '0005432919715'}]}},
 3: {'ticket_flights': {'flight_id': [{'flight_id': 3,
                                       'ticket_no': '0005432817560'},
                                      {'flight_id': 3,
                                       'ticket_no': '0005432817568'},
                                      {'flight_id': 3,
                                       'ticket_no': '0005432817559'}]}}}

ಕೋಡ್‌ನಲ್ಲಿ ಬಳಕೆ

ಇದನ್ನು ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ಚಲಾಯಿಸುವುದರ ಜೊತೆಗೆ, ಲೈಬ್ರರಿಯನ್ನು ಪೈಥಾನ್ ಕೋಡ್‌ನಲ್ಲಿ ಬಳಸಬಹುದು. iPython ಸಂವಾದಾತ್ಮಕ ಪರಿಸರದಲ್ಲಿ ಕರೆಗಳ ಉದಾಹರಣೆಗಳನ್ನು ಕೆಳಗೆ ತೋರಿಸಲಾಗಿದೆ.

ಟೇಬಲ್ ಆರ್ಕೈವ್ ಮಾಡಲಾಗುತ್ತಿದೆ

>>> from pg_graph.main import setup_logging
>>> setup_logging(log_level='DEBUG')
>>> from pg_graph.api import PgGraphApi
>>> api = PgGraphApi('config.hw.local.ini')
>>> api.archive_table('flights', [4,5])
2020-06-20 23:12:08 INFO: flights - START
2020-06-20 23:12:08 INFO: flights - start archive_recursive 2 rows (depth=0)
2020-06-20 23:12:08 INFO: 	START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: 	ticket_flights - ForeignKey(pk_main='flight_id', pk_ref='flight_id, ticket_no', fk_ref='flight_id')
2020-06-20 23:12:08 DEBUG: 	SQL('SELECT flight_id, ticket_no FROM bookings.ticket_flights WHERE (flight_id) IN (%s, %s)')
2020-06-20 23:12:08 INFO: 	ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: 		START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: 		boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: 		boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: 		SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: 		DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: 		END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: 	ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: 	SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: 	DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: 	INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: 	ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: 		START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: 		boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: 		boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: 		SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: 		DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: 		END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: 	ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: 	SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: 	DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: 	INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: 	ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: 		START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: 		boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: 		boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: 		SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: 		DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: 		END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: 	ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: 	SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: 	DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: 	INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: 	ticket_flights - start archive_recursive 3 rows (depth=1)
2020-06-20 23:12:08 INFO: 		START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: 		boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: 		boarding_passes - archive_by_fk 3 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: 		SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: 		DELETE FROM boarding_passes by FK flight_id, ticket_no - 3 rows
2020-06-20 23:12:08 INFO: 		END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: 	ticket_flights - archive_by_ids 3 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: 	SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: 	DELETE FROM ticket_flights by flight_id, ticket_no - 3 rows
2020-06-20 23:12:08 DEBUG: 	INSERT INTO ticket_flights_archive - 3 rows
2020-06-20 23:12:08 INFO: 	END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: flights - archive_by_ids 2 rows by flight_id
2020-06-20 23:12:09 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.flights_archive (LIKE bookings.flights)')
2020-06-20 23:12:09 DEBUG: DELETE FROM flights by flight_id - 2 rows
2020-06-20 23:12:09 DEBUG: INSERT INTO flights_archive - 2 rows
2020-06-20 23:12:09 INFO: flights - END

ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಕೋಷ್ಟಕಕ್ಕಾಗಿ ಅವಲಂಬನೆಗಳನ್ನು ಹುಡುಕಿ

>>> from pg_graph.api import PgGraphApi
>>> from pprint import pprint
>>> api = PgGraphApi('config.hw.local.ini')
>>> res = api.get_table_references('flights')
>>> pprint(res)
{'in_refs': {'ticket_flights': [ForeignKey(pk_main='flight_id', pk_ref='flight_id, ticket_no', fk_ref='flight_id')]},
 'out_refs': {'aircrafts': [ForeignKey(pk_main='aircraft_code', pk_ref='flight_id', fk_ref='aircraft_code')],
              'airports': [ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='arrival_airport'),
                           ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='departure_airport')]}}

ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಪ್ರಾಥಮಿಕ ಕೀಲಿಯೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್‌ಗಳಿಗೆ ಉಲ್ಲೇಖಗಳನ್ನು ಕಂಡುಹಿಡಿಯುವುದು

>>> from pg_graph.api import PgGraphApi
>>> from pprint import pprint
>>> api = PgGraphApi('config.hw.local.ini')
>>> rows = api.get_rows_references('flights', [1,2,3])
>>> pprint(rows)
{1: {'ticket_flights': {'flight_id': [{'flight_id': 1,
                                       'ticket_no': '0005432816945'},
                                      {'flight_id': 1,
                                       'ticket_no': '0005432816941'}]}},
 2: {'ticket_flights': {'flight_id': [{'flight_id': 2,
                                       'ticket_no': '0005433101832'},
                                      {'flight_id': 2,
                                       'ticket_no': '0005433101864'},
                                      {'flight_id': 2,
                                       'ticket_no': '0005432919715'}]}},
 3: {'ticket_flights': {'flight_id': [{'flight_id': 3,
                                       'ticket_no': '0005432817560'},
                                      {'flight_id': 3,
                                       'ticket_no': '0005432817568'},
                                      {'flight_id': 3,
                                       'ticket_no': '0005432817559'}]}}}

ಗ್ರಂಥಾಲಯದ ಮೂಲ ಕೋಡ್ ಇಲ್ಲಿ ಲಭ್ಯವಿದೆ GitHub MIT ಪರವಾನಗಿ ಅಡಿಯಲ್ಲಿ, ಹಾಗೆಯೇ ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ಪೈಪಿಐ.

ಕಾಮೆಂಟ್‌ಗಳು, ಬದ್ಧತೆಗಳು ಮತ್ತು ಸಲಹೆಗಳಿಗೆ ನಾನು ಸಂತೋಷಪಡುತ್ತೇನೆ.

ಇಲ್ಲಿ ಮತ್ತು ರೆಪೊಸಿಟರಿಯಲ್ಲಿ ನನ್ನ ಸಾಮರ್ಥ್ಯದ ಅತ್ಯುತ್ತಮ ಪ್ರಶ್ನೆಗಳಿಗೆ ಉತ್ತರಿಸಲು ನಾನು ಪ್ರಯತ್ನಿಸುತ್ತೇನೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ