表資料
# 生成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就是其...