獲取資料庫表中節點的層級關係並列印輸出

2021-08-11 04:11:08 字數 3222 閱讀 3188

表資料

# 生成orm基類

base = declarative_base()

def init_sqlalchemy(host, database):

"""初始化sqlalchemy"""

url = "mysql+pymysql://root:aware@" + host + "/" + database + "?charset=utf8" # 拼接資料庫串

print(url)

engine = create_engine(url, encoding='utf-8', echo=false) # 建立引擎

dbsession = sessionmaker(bind=engine) # 建立dbsession型別:

session = dbsession() # 建立session物件:

return session

class t_domain(base):

"""定義t_domain物件:"""

__tablename__ = 't_domain_copy' # 表的名字:

# 表的結構:

domainid = column(integer, primary_key=true)

domainname = column(string(255))

domainparentid = column(integer)

class domainmap(object):

def __init__(self, host, database):

self.session = init_sqlalchemy(host, database) # 獲取session物件

def domain_map(self):

"""獲取節點層級關係"""

# 存放每個節點及對應的名稱

domaininfos = {}

# 存放每個節點與父節點的對應關係

domainidtoparentids = {}

# 查詢資料庫表

res = self.session.query(t_domain).order_by(t_domain.domainparentid).all()

# 遍歷所有記錄

for r in res:

# 獲取記錄獲取節點id和節點名稱

if r.domainid not in domaininfos.keys():

domaininfos[r.domainid] = r.domainname

# 獲取所有子節點與該父節點的對應關係

if r.domainid not in domainidtoparentids:

domainidtoparentids[r.domainid] = r.domainparentid

# 獲取根節點的父節點

rootparentid = list(set(domainidtoparentids.values()) - set(domainidtoparentids.keys()))[0]

# 獲取根節點

rootid = list(domainidtoparentids.keys())[list(domainidtoparentids.values()).index(rootparentid)]

# print("根節點", rootid)

# 獲取層級關係

domainmaps = }

domainmaps = self.__map(domainidtoparentids, domainmaps)

return domainmaps, domaininfos

def __map(self, domainidtoparentids, maps):

"""遞迴遍歷所有節點記錄"""

for k in maps.keys():

domainids = }

for j in domainidtoparentids.keys():

if domainidtoparentids[j] == k:

domainids[k][j] = {}

maps[k] = domainids[k]

self.__map(domainidtoparentids, maps[k])

return maps

def print_info(self, domainmap, domaininfos, num):

"""列印節點資訊"""

if type(domainmap) == dict or len(domainmap) != 0:

for k in domainmap.keys():

print('\t' * num, domaininfos[k])

self.print_info(domainmap[k], domaininfos, num+1)

def main(self):

"""主程式"""

# 獲取域層級關係

domainmaps, domaininfos = self.domain_map()

num = 0

self.print_info(domainmaps, domaininfos, num)

if __name__ == '__main__':

host = 'localhost'

databases = ['ykdhg']

for database in databases:

print(' %s '.center(100, '*') % database)

test = domainmap(host, database)

test.main()

mysql 儲存層級關係 在資料庫中儲存層級結構

位於分類 技巧集錦 1 首先是鄰接表模型。鄰接表相當簡單。只需要寫乙個遞迴函式來遍歷這個樹。我們的食品商店的例子用鄰接表模型儲存時看起來就像是這樣 通過鄰接表模型儲存法中,我們可以看到pear,它的父節點是green,而green的父節點又是fruit,以此類推。而根節點是沒有父節點的。這裡為了方便...

mysql資料庫表關係 資料庫 表關係

上節回顧 1.建表語法 注意點 2.資料型別 今日內容 1.表之間的關係 多對一,多對多,一對一 2.複製表 分表 為什麼要分表?乙個表中 要儲存個人資訊又要儲存部門資訊 會導致大量的資料冗餘 所有資料存放在同乙個表中 將導致以下幾個問題 1.浪費空間 不致命 2.結構混亂 3.修改資料時 如果有一...

模式與資料庫 資料庫中的表的關係

模式與資料庫 資料庫中的表的關係 1個資料庫下,可以有多個模式。1個模式下,可以有0個或多個表 首先我來做乙個比喻,什麼是user,什麼是database,什麼是schema,什麼是table,什麼是列,什麼是行,我們可以把database看作是乙個大倉庫,倉庫分了很多很多的房間,schema就是其...