2021-08-29

數(shù)據(jù)模型:

# coding:utf-8
import pymysql

pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine, VARCHAR
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DATE, ForeignKey, CHAR  # 導(dǎo)入外鍵
from sqlalchemy.orm import relationship  # 創(chuàng)建關(guān)系

engine=create_engine("mysql+mysqldb://root:123456@localhost:3306/test?charset=utf8",
                     encoding="utf-8")

Base=declarative_base()  # 生成orm基類


class Food(Base):
    __tablename__="food"

    name=Column(CHAR(20), primary_key=True)
    location=Column(CHAR(20))

    # def __repr__(self):
    #     return "name:{0} location:{1}".format(self.name, self.location)


class Famous(Base):
    __tablename__='famous'
    id=Column(Integer, primary_key=True)
    food_name=Column(CHAR(20))
    famous_dish=Column(CHAR(20))

    # def __repr__(self):
    #     return "id:{0} food_name:{1} famous_dish:{2}".format(self.id, self.food_name, self.famous_dish)


class People(Base):
    __tablename__='people'
    people_name=Column(CHAR(20), primary_key=True)
    age=Column(CHAR(20))
    sex=Column(CHAR(20))
    city=Column(VARCHAR(20))
    like_food=Column(VARCHAR(20))

Base.metadata.create_all(engine)  # 創(chuàng)建表

建表

插入數(shù)據(jù):

# coding:utf-8

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column
from model import Food, Famous

# 中文在命令行中顯示為16進(jìn)制編碼淫痰,所以用拼音代替嗡载,懂這個(gè)意思就行。
food={
    u"lu": u"shandong",
    u"chuan": u"chengdu",
    u"su": u"nanjing",
    u"yue": u"zhusanjiao"
}

famous=[
    {u'lu': u'tangculiyu'},
    {u'chuan': u'yuxiangrousi'},
    {u'chuan': u'gongbaojiding'},
    {u'chuan': u'shuizhuroupian'},
    {u'su': u'songshuguiyu'},
    {u'su': u'yanshuiya'},
    {u'yue': u'baizhanji'}
]

engine=create_engine('mysql+mysqldb://root:123456@localhost:3306/test?charset=utf8')
DBSession=sessionmaker(bind=engine)
session=DBSession()

for key in list(food.keys()):
    print(key)
    new_food=Food(name=key, location=food[key])
    session.add(new_food)
session.commit()

for dish in famous:
    new_famous=Famous(food_name=list(dish.keys())[0], famous_dish=list(dish.values())[0])
    session.add(new_famous)
session.commit()

session.close()

# if __name__ == '__main__':
#     print(list({u'lu': u'tangculiyu'}.keys())[0])

查詢數(shù)據(jù):

# coding:utf-8
from pprint import pprint

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from model import *

# 修改用戶名刽脖、密碼和數(shù)據(jù)庫的名稱為自己的
engine=create_engine("mysql+mysqldb://root:123456@localhost:3306/test", )
Session_class=sessionmaker(bind=engine)
session=Session_class()

# 沒有帶外鍵,也沒有指明兩個(gè)表之間的關(guān)系就會報(bào)錯(cuò):
# query=session.query(Food).join(Famous).all()

"""
sqlalchemy.exc.InvalidRequestError: Don't know how to join to <Mapper at 0x2acce08b5c8; Famous>.
 Please use the .select_from() method to establish an explicit left side, as well as providing 
 an explicit ON clause if not present already to help resolve the ambiguity.
"""
# 沒加all() 返回的SQL語句
# no_all_no_filter_query_return_sql=session.query(Food, Famous).join(Famous, Famous.food_name == Food.name)
# print(no_all_no_filter_query_return_sql)
#
# no_all_yes_filter_query_return_sql=session.query(Food, Famous).join(Famous, Famous.food_name == Food.name).filter(
#     Food.location == "chengdu")
# print(no_all_yes_filter_query_return_sql)
#
# # 加了all()返回list對象[<class 'sqlalchemy.engine.row.Row'>]
#
yes_all_yes_filter_query_return_list_obj=session.query(Food, Famous).join(Famous, Famous.food_name == Food.name).filter(
    Food.location == "chengdu").all()
print(yes_all_yes_filter_query_return_list_obj)
data = [i._asdict() for i in yes_all_yes_filter_query_return_list_obj][0]
# pprint([i._asdict() for i in yes_all_yes_filter_query_return_list_obj])
pprint(data)
pprint(type(list(data.values())[1]))
pprint(type(list(data.keys())[1]))

#
# yes_all_no_filter_query_return_list_obj=session.query(Food, Famous).join(Famous, Famous.food_name == Food.name).all()
# print(yes_all_no_filter_query_return_list_obj)
#
# # 分頁之前必須沒有加all()
# query2=no_all_no_filter_query_return_sql
# pageIndex=2
# pageSize=1
#
# userlist=query2.limit(pageSize).offset(
#     (pageIndex - 1) * pageSize).all()
# print(userlist)
# print(userlist[0])
# print(type(userlist[0]))
# 多個(gè)對象
def dobule_to_dict(self_obj):
    result={}
    for key in self_obj.__mapper__.c.keys():
        if getattr(self_obj, key) is not None:
            result[key]=str(getattr(self_obj, key))
        else:
            result[key]=getattr(self_obj, key)
    return result


# two_query=session.query(Food, Famous).all()
# print(len(two_query))
# print(two_query[0]._asdict())
# two_query_filter=session.query(Food, Famous).filter(Food.location == "chengdu").all()

兩表,連查詢研究:

obj=session.query(Food, Famous).join(Famous, Famous.food_name == Food.name).filter(
    Food.location == "chengdu").all()
pprint(obj)
list_obj1 = []

for i in obj:
    # pprint(i)
    tus={}
    for j in i :
        if "_sa_instance_state" in list(j.__dict__.keys()):
            del j.__dict__["_sa_instance_state"]
        tus.update(j.__dict__)
    list_obj1.append(tus)
pprint(list_obj1)

單表查詢研究:

list_obj=session.query(Food).filter(Food.location == "chengdu").all()

pprint(list_obj)
msgs = []
for msg in list_obj:
    print(msg)
    if "_sa_instance_state" in list(msg.__dict__.keys()):
        del msg.__dict__["_sa_instance_state"]
        msgs.append(msg.__dict__)
print(msgs)

結(jié)果;

三表聯(lián)查

obj=session.query(Food, Famous, People).join((Famous, Famous.food_name == Food.name),
                                             (People, People.city == Food.location)
                                             ).filter(Food.location == "chengdu").all()

pprint(obj)
list_obj1=[]
tus={}
for i in obj:
    for j in i:
        if "_sa_instance_state" in list(j.__dict__.keys()):
            del j.__dict__["_sa_instance_state"]
        tus.update(j.__dict__)
    list_obj1.append(tus)
pprint(list_obj1)

結(jié)果:


項(xiàng)目思路:
"""
resource 表 uuid 等于 dataset 的 uuid
resource 表的 parent_uuid 對應(yīng) namespace_id
protected_obj 表 resource_id == resource 表的uuid

現(xiàn)在查dataset 表,

1.dataset_list = session.query(Resource).filter(Resource.parent_id == namespace_id).all()

2.query_all = session.query(K8sDataset, Resource, Protect).join(Resource, Resource.uuid == K8sDataset.uuid,
Protect, Protect.resource_id == K8sDataset.uuid).filter(
K8sDataset.uuid._in(dataset_list)
).all()

"""


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末举庶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子揩抡,更是在濱河造成了極大的恐慌户侥,老刑警劉巖镀琉,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕊唐,居然都是意外死亡屋摔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門替梨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓试,“玉大人,你說我怎么就攤上這事副瀑」” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵糠睡,是天一觀的道長挽鞠。 經(jīng)常有香客問我,道長狈孔,這世上最難降的妖魔是什么信认? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮均抽,結(jié)果婚禮上嫁赏,老公的妹妹穿的比我還像新娘。我一直安慰自己油挥,他們只是感情好潦蝇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喘漏,像睡著了一般护蝶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翩迈,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天持灰,我揣著相機(jī)與錄音,去河邊找鬼负饲。 笑死堤魁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的返十。 我是一名探鬼主播妥泉,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洞坑!你這毒婦竟也來了盲链?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刽沾,沒想到半個(gè)月后本慕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侧漓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年锅尘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片布蔗。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藤违,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纵揍,到底是詐尸還是另有隱情顿乒,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布骡男,位于F島的核電站淆游,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隔盛。R本人自食惡果不足惜犹菱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吮炕。 院中可真熱鬧腊脱,春花似錦、人聲如沸龙亲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄炉。三九已至杜耙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拂盯,已是汗流浹背佑女。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谈竿,地道東北人团驱。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像空凸,于是被迫代替她去往敵國和親嚎花。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Java 常見英語單詞 (1.0 版本) 1. Java 基礎(chǔ)常見英語詞匯(70 個(gè)) OO: object-or...
    Nemo359閱讀 2,151評論 0 0
  • Java基礎(chǔ)常見英語詞匯(共70個(gè))['?bd?ekt] ['?:rientid]導(dǎo)向的 ...
    今夜子辰閱讀 3,265評論 1 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理呀洲,服務(wù)發(fā)現(xiàn)紊选,斷路器啼止,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Spring 技術(shù)筆記Day 1 預(yù)熱知識一、 基本術(shù)語Blob類型丛楚,二進(jìn)制對象Object Graph:對象圖...
    OchardBird閱讀 961評論 0 2
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者族壳,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn)趣些,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,033評論 0 4