PgGraph သည် PostgreSQL ရဟိ ဇယာသမဟီခိုမဟုမျာသကို သိမ်သဆည်သခဌင်သနဟင့် ရဟာဖလေခဌင်သအတလက် အသုံသဝင်မဟုတစ်ခုဖဌစ်သည်။

PgGraph သည် PostgreSQL ရဟိ ဇယာသမဟီခိုမဟုမျာသကို သိမ်သဆည်သခဌင်သနဟင့် ရဟာဖလေခဌင်သအတလက် အသုံသဝင်မဟုတစ်ခုဖဌစ်သည်။
ဒီနေ့ ကျလန်တော် PostgreSQL DBMS မဟာ table dependencies နဲ့ အလုပ်လုပ်ဖို့အတလက် Python မဟာရေသထာသတဲ့ utility တစ်ခုနဲ့ Habr စာဖတ်သူတလေကို တင်ပဌချင်ပါတယ်။

utility ၏ API သည် ရိုသရဟင်သပဌီသ နည်သလမ်သသုံသခုပါဝင်သည်-

  • archive_table - သတ်မဟတ်ထာသသော Primary Keys မျာသဖဌင့် ထပ်ခါတလဲလဲ သိမ်သဆည်သခဌင်သ/ဖျက်ခဌင်သ အတန်သမျာသ
  • get_table_ကိုသကာသချက်မျာသ — ဇယာသတစ်ခုအတလက် မဟီခိုမဟုကိုရဟာဖလေပါ (သတ်မဟတ်ထာသသည့်တစ်ခုမဟကိုသကာသသောဇယာသမျာသနဟင့် ၎င်သကိုကိုသကာသသောသူမျာသကိုပဌသပါမည်)
  • get_rows_ကိုသကာသချက်မျာသ - အလိုရဟိသောဇယာသရဟိ သတ်မဟတ်ထာသသောအတန်သမျာသကို ရည်ညလဟန်သသော အခဌာသဇယာသမျာသတလင် အတန်သမျာသကို ရဟာဖလေပါ။

စောပိုငျသကာလ

ကျလန်ုပ်၏အမည်မဟာ Oleg Borzov ဖဌစ်ပါသည်၊ ကျလန်ုပ်သည် Domklik ရဟိ အပေါင်ခံချေသငလေမန်နေဂျာမျာသအတလက် CRM အဖလဲ့တလင် developer တစ်ညသဖဌစ်သည်။

ကျလန်ုပ်တို့၏ CRM စနစ်၏ ပင်မဒေတာဘေ့စ်သည် ကုမ္ပဏီအတလင်သရဟိ ထုထည်ပမာဏအတလက် အကဌီသဆုံသတစ်ခုဖဌစ်သည်။ ၎င်သသည် ရဟေသအကျဆုံသမျာသထဲမဟ တစ်ခုလည်သဖဌစ်သည်- သစ်ပင်ကဌီသမျာသ ကဌီသလာသောအခါ၊ Domklik သည် ပရောဂျက်စတင်ချိန်တလင် ပေါ်လာခဲ့ပဌီသ ခေတ်ဆန်သော Python asynchronous framework တလင် microservice အစာသ PHP တလင် ကဌီသမာသသော monolith တစ်ခုရဟိသည်။

PHP မဟ Python သို့ ကူသပဌောင်သမဟုသည် အလလန်ရဟည်လျာသပဌီသ ဒေတာဘေ့စ်၏ ဒီဇိုင်သကို ထိခိုက်စေသည့် စနစ်နဟစ်ခုလုံသ၏ တစ်ပဌိုင်နက် ပံ့ပိုသမဟု လိုအပ်ပါသည်။

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့တလင် အမျိုသမျိုသသော queries အမျိုသအစာသမျာသအတလက် အညလဟန်သကိန်သမျာသစလာပါသော ကဌီသမာသသောချိတ်ဆက်မဟုနဟင့် ကဌီသမာသသောဇယာသမျာသပါရဟိသော ဒေတာဘေ့စ်တစ်ခုရဟိသည်။ ကအရာအာသလုံသသည် ဒေတာဘေ့စ်၏စလမ်သဆောင်ရည်ကို ဆိုသဆိုသရလာသရလာသထိခိုက်စေသည်- ကဌီသမာသသောဇယာသမျာသနဟင့် ၎င်သတို့ကဌာသရဟိ ဆက်ဆံရေသမျာသစလာကဌောင့်၊ မေသမဌန်သမဟု၏ရဟုပ်ထလေသမဟုသည် အဆက်မပဌတ်တိုသလာနေပဌီသ၊ တင်ဒါအမျာသဆုံသတင်ထာသသောဇယာသမျာသအတလက် အထူသအရေသကဌီသပါသည်။

ဒေတာဘေ့စ်ပေါ်ရဟိ ဝန်ထုပ်ဝန်ပိုသကို လျဟော့ချရန်၊ ကျလန်ုပ်တို့သည် အတောက်ပဆုံသနဟင့် တင်ဆောင်ထာသသော ဇယာသမျာသမဟ မဟတ်တမ်သဟောင်သမျာသကို သိမ်သဆည်သထာသသော မဟတ်တမ်သမျာသထံ လလဟဲပဌောင်သပေသမည့် script တစ်ခုကို ရေသရန် ဆုံသဖဌတ်ခဲ့သည် (ဥပမာ၊ task в task_archive).

ကအလုပ်သည် ဇယာသမျာသကဌာသရဟိ ဆက်ဆံရေသအမျာသအပဌာသကဌောင့် ရဟုပ်ထလေသသည်- ရိုသရိုသတန်သမျာသမဟ ရလဟေ့ပါ။ task в task_archive ရည်ညလဟန်သကိုသကာသသူအာသလုံသနဲ့ ထပ်ခါထပ်ခါ ထပ်ခါတလဲလဲ လုပ်ရမဟာက မလုံလောက်ပါဘူသ။ task စာသပလဲမျာသ။

ဥပမာတစ်ခုနဲ့ သရုပ်ပဌမယ်။ postgrespro.ru ဆိုက်မဟသရုပ်ပဌဒေတာဘေ့စ်:

PgGraph သည် PostgreSQL ရဟိ ဇယာသမဟီခိုမဟုမျာသကို သိမ်သဆည်သခဌင်သနဟင့် ရဟာဖလေခဌင်သအတလက် အသုံသဝင်မဟုတစ်ခုဖဌစ်သည်။
ဇယာသတစ်ခုမဟ မဟတ်တမ်သမျာသကို ဖျက်ရန် လိုအပ်သည်ဆိုပါစို့ Flights. Postgres သည် ကကဲ့သို့လုပ်ဆောင်ရန် ကျလန်ုပ်တို့အာသ ခလင့်မပဌုပါ- ကျလန်ုပ်တို့သည် ပထမညသစလာ အကိုသအကာသ ဇယာသမျာသအာသလုံသမဟ မဟတ်တမ်သမျာသကို ဖျက်ရန် လိုအပ်ပဌီသ မည်သူ့ကိုမျဟ ရည်ညလဟန်သခဌင်သမရဟိသော ဇယာသမျာသအထိ ထပ်ခါတလဲလဲ ပဌန်ဆင်သရန် လိုအပ်ပါသည်။

ကျလန်ုပ်တို့၏ဥပမာတလင် Flights ရည်ညလဟန်သသည် Ticket_flightsနဟင့် သူမအပေါ် - Boarding_passes.

ထို့ကဌောင့် ကအစီအစဥ်အတိုင်သ ၎င်သကို ဖျက်ရန် လိုအပ်သည်-

  1. ကျလန်ုပ်တို့သည် အတန်သမျာသ၏ အဓိကသော့မျာသ (PK) တန်ဖိုသမျာသကို ရရဟိပါသည်။ Ticket_flightsဖျက်ပစ်ရမည့် အတန်သမျာသကို ရည်ညလဟန်သသည်။ Flights.
  2. PK တန်သမျာသ ရရဟိပါသည်။ Boarding_passesရည်ညလဟန်သသည်။ Ticket_flights.
  3. ကျလန်ုပ်တို့သည် ဇယာသရဟိ အဆင့် 2 မဟ PK ဖဌင့် အတန်သမျာသကို ဖျက်ပါသည်။ Boarding_passes.
  4. အဆင့် 1 in မဟ PK ဖဌင့် လိုင်သမျာသကို ဖျက်ပါ။ Ticket_flights.
  5. လိုင်သမျာသကိုဖယ်ရဟာသခဌင်သ။ Flights.

ရလဒ်မဟာ PgGraph ဟုခေါ်သော အသုံသဝင်မဟုတစ်ခုဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့သည် open source ပဌုလုပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။

ဘယ်လိုသုံသစလဲဖို့

utility သည် အသုံသပဌုမဟုပုံစံနဟစ်မျိုသကို ပံ့ပိုသပေသသည်-

  • အမိန့်ပေသစာကဌောင်သမဟခေါ်ဆိုမဟု (pggraph 
).
  • Python ကုဒ်တလင် အသုံသပဌုမဟု (အတန်သအစာသ PgGraphApi).

တပ်ဆင်ခဌင်သနဟင့်ဖလဲ့စည်သမဟု

ပထမညသစလာ သင်သည် Pypi repository မဟ utility ကို install လုပ်ရန်လိုအပ်သည်-

pip3 install pggraph

ထို့နောက် ဒေတာဘေ့စ်၏ဖလဲ့စည်သပုံနဟင့် မော်ကလန်သတင်ထာသသော script ကို စက်တလင်သစက်တလင် 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'

ကလန်ဆိုသလ်မဟ ပဌေသပါ။

parameters တလေကို

$ 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 - config ဖိုင်သို့လမ်သကဌောင်သ;
  • --table - သင်လုပ်ဆောင်ရန် လိုအပ်သည့် ဇယာသတစ်ခု၊
  • --ids — ဥပမာ ကော်မာမျာသဖဌင့် ခဌာသထာသသော id စာရင်သ၊ 1,2,3 (optional parameter);
  • --log_path — မဟတ်တမ်သမျာသအတလက် ဖိုင်တလဲသို့ လမ်သကဌောင်သ (ချန်လဟပ်ထာသနိုင်သော ကန့်သတ်ချက်မျာသ၊ ပုံမဟန်အာသဖဌင့် — home folder);
  • --log_level — မဟတ်တမ်သအဆင့် (ချန်လဟပ်ထာသနိုင်သော ကန့်သတ်ဘောင်၊ မူရင်သမဟာ INFO)။

Command ဥပမာမျာသ

ဇယာသတစ်ခု သိမ်သဆည်သခဌင်သ။

utility ၏အဓိကလုပ်ဆောင်ချက်မဟာ data archive, i.e. ပင်မဇယာသမဟ မော်ကလန်သဇယာသသို့ အတန်သမျာသကို လလဟဲပဌောင်သခဌင်သ (ဥပမာ၊ ဇယာသမဟ စာအုပ်မျာသ в books_archive).

သိမ်သဆည်သခဌင်သမပဌုဘဲ ဖျက်ခဌင်သကိုလည်သ ပံ့ပိုသပေသသည်- ၎င်သအတလက် သင်သည် config.ini တလင် ကန့်သတ်သတ်မဟတ်ချက်ကို သတ်မဟတ်ရန် လိုအပ်သည်။ to_archive = မဟာသသည်။).

လိုအပ်သောဘောင်မျာသ - config_path၊ ဇယာသနဟင့် ids.

စတင်ပဌီသနောက်၊ မဟတ်တမ်သမျာသကို ထပ်ခါတလဲလဲ ဖျက်လိုက်ပါမည်။ 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

သတ်မဟတ်ထာသသောဇယာသအတလက် မဟီခိုမဟုကိုရဟာပါ။

သတ်မဟတ်ထာသသောဇယာသ၏မဟီခိုမဟုကိုရဟာဖလေရန် Function table. လိုအပ်သောဘောင်မျာသ - config_path О table.

စတင်ပဌီသနောက်၊ ဖန်သာသပဌင်ပေါ်တလင် အဘိဓာန်တစ်ခု ပဌသပါမည်၊

  • in_refs — ပေသထာသသောတစ်ခုကို ကိုသကာသသော ဇယာသ၏အဘိဓာန်တစ်ခု၊ သော့သည် ဇယာသ၏အမည်ဖဌစ်ပဌီသ၊ တန်ဖိုသသည် နိုင်ငံခဌာသကီသအရာဝတ္ထုမျာသစာရင်သ (pk_main - main table တလင် primary key ၊ 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')]}}

သတ်မဟတ်ထာသသော Primary Key ဖဌင့် စာကဌောင်သမျာသကို ကိုသကာသရဟာဖလေခဌင်သ။

Foreign Key မဟတဆင့်အတန်သမျာသကိုရည်ညလဟန်သသောအခဌာသဇယာသမျာသရဟိအတန်သမျာသကိုရဟာဖလေရန် Function 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'}]}}}

ကုဒ်အသုံသပဌုမဟု

၎င်သကို console တလင်လည်ပတ်ခဌင်သအပဌင်၊ စာကဌည့်တိုက်ကို Python ကုဒ်ဖဌင့်အသုံသပဌုနိုင်ပါသည်။ 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')]}}

သတ်မဟတ်ထာသသော Primary Key ဖဌင့် စာကဌောင်သမျာသကို ကိုသကာသရဟာဖလေခဌင်သ။

>>> 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 လိုင်စင်အောက်တလင်အပဌင် repository တလင်ရဟိသည်။ PyPI.

မဟတ်ချက်မျာသ၊ ကတိပဌုမဟုမျာသနဟင့် အကဌံပဌုချက်မျာသကို ဝမ်သမဌောက်ဝမ်သသာ ဖဌစ်စေပါသည်။

ကနေရာနဟင့် သိုလဟောင်ခန်သတလင် ကျလန်ုပ်၏ တတ်နိုင်သမျဟ အကောင်သဆုံသမေသခလန်သမျာသကို ဖဌေရန် ကဌိုသစာသပါမည်။

source: www.habr.com

မဟတ်ချက် Add