咦? 你圖中的示例 不也是 執(zhí)行不同的函數(shù)返回不同的session 嗎 ? flask 里的 sqlalchemy 和 python自己安裝的sqlalchemy 不是一樣的嗎..?
點最后一個按鈕
select * from test1 where find_in_set(id,(select ids_str from test2));
SELECT Child.user_id, Child.Lft, Child.Rgt,Child.Level
FROM kt_relation as Child, kt_relation as Parent
WHERE
Child.Level = 3+1
-- AND Child.Lft+Child.Rgt <= Parent.Lft +Parent.Rgt -- 左區(qū)
AND Child.Lft+Child.Rgt > Parent.Lft +Parent.Rgt -- 右區(qū)
AND Parent.user_id = 10001
AND Child.Lft+Child.Rgt <= 12 +25
搞出來了一個sql語句,可以實現(xiàn)。前提是確認(rèn)這個節(jié)點是最頂層節(jié)點10001的哪個區(qū)域,然后查10001的右區(qū),再加個條件,查詢10003的左區(qū),12+25就能代表10003了。
這種自連接,搞的我有點暈乎!速度還可以,可能是有索引的原因。
php里面就是,先取得待查的節(jié)點10003的記錄,取出他的,左右值。
然后計算出,應(yīng)該查以根節(jié)點開始的哪層。比如這個10003,要查他開始的第3層,那實際查的應(yīng)該是,10001的第4層。因為10003與10001差1層。所以是,3+1層。什么亂七八糟的。
搞出來個簡單的,先查出這個節(jié)點的所有子孫節(jié)點,加條件,和值小于自身,再限定定層。就出來了。
SELECT * FROM Tree WHERE Lft > 1 AND Lft < 26 AND Lft + Rgt <= 1 + 26 AND Level = 4
為什么,我把問題寫出來,然后不久,自己就解決了問題,好怪。不寫就整不出來。其實我就是個菜b
已經(jīng)有人問過了:mongodb分組查詢,取各班第1名
-說明這個值發(fā)生了變化,變化的結(jié)果是后面跟著的1或者0.哇 中文表名 ,第一次見
數(shù)據(jù)庫里面用事務(wù)和鎖來防止重復(fù)就行
其他的方法也可以,比如設(shè)置一個請求隊列,先進(jìn)先出,這樣就可以按照順序發(fā)馬甲了
InnoDB是Inno Database的縮寫。
Innobase Oy是芬蘭的一家公司,InnoDB其實就是以公司名命名的了。
1。為什么不能使用默認(rèn)id
2。如果自定義id,那么默認(rèn)id也會自動生成
3。要使用自定義id查詢,就用自定義的字段名稱就好,默認(rèn)id當(dāng)然同樣是可以繼續(xù)使用的
SCRAM-SHA-1認(rèn)證,檢查一下你的賬號是不是MONGODB-CR:use admin
db.system.users.find()題主可以逆向思考這個秒殺問題,由于Redis的list數(shù)據(jù)結(jié)構(gòu)是不可能到達(dá)“負(fù)”長度的,所以可以把需要被秒殺的商品信息和一個唯一編號預(yù)先放到指定商品類型的唯一隊列中,用戶請求時直接lpop出結(jié)果,不可能出現(xiàn)超量的問題,很多東西都免了。
如果能給些測試條件別人會更容易理解你的問題。
首先說$eq,這個運(yùn)算符大部分時候沒有必要寫。所以你的查詢等價于:
db.SEC_2018_05_12.aggregate([
{ $match : { fyear : 2018, fmonth: 5, fday: 12, fhour: 17, fmin: 8 } },
{ $group: { _id: {dev_id: "$dev_id", data_id: "$data_id"}, maxTimeValue: { $max: "$fdate" } } } ]).pretty()
然后你的要求是取到第一條數(shù)據(jù),而不僅僅是最大那個fdate值??梢該Q個思路來理解這個問題:
按dev_id asc, data_id asc, fdate desc三者來排序,然后取每個分組的第一條數(shù)據(jù)
按照這個思路,查詢應(yīng)該是:
db.SEC_2018_05_12.aggregate([
{ $match : { fyear : 2018, fmonth: 5, fday: 12, fhour: 17, fmin: 8 } },
{ $sort: { dev_id: 1, data_id: 1, fdate: -1} },
{ $group: { _id: {dev_id: "$dev_id", data_id: "$data_id"}, maxDoc: { $first: "$$ROOT" } } } ]).pretty()
最后說說數(shù)據(jù)模型設(shè)計的問題。$match這里其實就是一個時間,但是被你拆成了很多部分來存儲。除非有明確的理由支持,個人并不是十分贊成這樣的做法。
$match/$sort需要索引的支持,所以原來一個索引現(xiàn)在將會變成5個字段的聯(lián)合索引,同樣是浪費空間和效率;在數(shù)據(jù)量大的情況下,上面的查詢是需要索引支持的。換你現(xiàn)在的寫法,索引應(yīng)該是:
{
fyear: 1,
fmonth: 1,
fday: 1,
fhour: 1,
fmin: 1,
dev_id: 1,
data_id: 1,
fdate: -1
}
看上去就夠驚悚了不是嗎?但其實前面那一堆時間本身只是一個時間而已。
name是主鍵????
不推薦存數(shù)據(jù)庫中,假如站點訪問量大的時候,對數(shù)據(jù)庫會頻繁寫入,頻繁讀取,從而影響數(shù)據(jù)庫性能。一般用redis memcache存更好些。而且維護(hù)過期時間等也方便。設(shè)置key過期時間就好。
不建議在數(shù)據(jù)庫端運(yùn)行這樣的邏輯。并且,這跟在NodeJS端定義一個這樣的函數(shù)也沒有什么區(qū)別,為什么一定要放到MongoDB里面?
描述一下具體的使用場景可能有助于我們分析問題。
用 Column 對象 的 in_ 方法。filter需要傳遞的參數(shù)為表達(dá)式,此處剛好。filter_by需要傳遞關(guān)鍵字參數(shù),所以此處in_沒法使用。
in_在OOP和非OOP兩種模式中的使用-demo:
# 通用
from sqlalchemy import (
create_engine,
Column,
Integer,
String
)
# oop方式所需
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 非oop方式所需
from sqlalchemy import (
Table,
MetaData,
)
from sqlalchemy.sql import func
Base = declarative_base()
class Table1(Base):
__tablename__ = 'table1'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(55))
def __init__(self, name):
super(Table1, self).__init__()
self.id = None
self.name = name
def __repr__(self):
return '<Table1 {0}>'.format(self.id if not self.id is None else '')
uri = 'sqlite:///:memory:'
engine = create_engine(uri)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine, autocommit=False)
############# 添加對象, 填充測試數(shù)據(jù)
session = Session()
for name in 'zhang,wang,li,gong,chen,zhao'.split(','):
obj = Table1(name)
session.add(obj)
session.commit()
lst_filter = ['wang', 'li', 'zhao']
############# OOP方式查詢
# 查詢總數(shù)
Q = session.query(Table1)
print(Q.count())
# 篩選
Q = Q.filter(Table1.name.in_(lst_filter))
result = Q.all()
print(result)
session.close()
############# 非OOP方式查詢
metadata = MetaData(bind=engine)
table = Table('table1', metadata, autoload=True)
# 查詢總數(shù)
stmt = func.count(table).select()
print(stmt.execute().fetchone())
# 篩選
stmt = table.select().where(table.c.name.in_(lst_filter))
rp = stmt.execute()
result = rp.fetchall()
# print(result)
print(len(result))
engine.dispose()
執(zhí)行結(jié)果:
6
[<Table1 2>, <Table1 3>, <Table1 6>]
(6,)
3
參考:
Implement the in operator.
In a column context, produces the clause a IN other. “other” may be a tuple/list of column expressions, or a select() construct.
apply the given filtering criterion to a copy of this Query, using SQL expressions.
apply the given filtering criterion to a copy of this Query, using keyword expressions.
$lookup 首先進(jìn)行的是左外連接查詢。 當(dāng)匹配到多個滿足外鍵條件的記錄時,會放到數(shù)組子集合里。 再之后你的match2,match3,match4,match5針對子集合查詢。 而mongo這里的子集合匹配,只要子集合中有一條滿足,就會全部整條記錄滿足。
mongodb V3.2、V3.4版本的$lookup提供的解決方案是先$unwind一下。mongodb V3.6及以上的版本,$lookup提供了pipeline字段。具體參考$lookup官方文檔
你說的這個在MySQL里不是主從,而是雙主(因為一會兒寫A,一會兒寫B(tài)),主從的意思是寫永遠(yuǎn)都寫主,再異步同步到從。
實際項目中一般不用雙主(可靠性和可維護(hù)性不如主從),主從的應(yīng)用卻很廣泛,而且一般主從也夠了,因為主從模式已經(jīng)很好的分擔(dān)掉讀操作,大部分應(yīng)用都是寫少讀多,從我個人的經(jīng)驗,不建議使用MySQL的多主。
如果有富文本的話,可以用html、uub、markdown等格式用文本編碼,保存在數(shù)據(jù)庫的TEXT(即CLOB)類型的屬性里。
文章中有圖片、視頻的話,可以在上述文本中嵌入圖片鏈接,設(shè)計另一張表去管理這些鏈接。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。