[{"data":1,"prerenderedAt":7669},["ShallowReactive",2],{"navigation_docs":3,"-api-collection":106,"-api-collection-surround":7664},[4,26,57,83],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":25},"Getting Started","i-lucide-rocket","/getting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-play",false,{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":25},"Core Concepts","i-lucide-book-open","/essentials","2.essentials",[32,37,42,47,52],{"title":33,"path":34,"stem":35,"icon":36},"Models","/essentials/models","2.essentials/1.models","i-lucide-box",{"title":38,"path":39,"stem":40,"icon":41},"Collections","/essentials/collections","2.essentials/2.collections","i-lucide-folder",{"title":43,"path":44,"stem":45,"icon":46},"Views","/essentials/views","2.essentials/3.views","i-lucide-table",{"title":48,"path":49,"stem":50,"icon":51},"Schema Evolution","/essentials/schema-evolution","2.essentials/4.schema-evolution","i-lucide-git-branch",{"title":53,"path":54,"stem":55,"icon":56},"Relations","/essentials/relations","2.essentials/5.relations","i-lucide-link",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":25},"Advanced","i-lucide-settings","/advanced","3.advanced",[63,68,73,78],{"title":64,"path":65,"stem":66,"icon":67},"Time-Series","/advanced/time-series","3.advanced/1.time-series","i-lucide-chart-line",{"title":69,"path":70,"stem":71,"icon":72},"Async Support","/advanced/async","3.advanced/2.async","i-lucide-zap",{"title":74,"path":75,"stem":76,"icon":77},"PostgreSQL","/advanced/postgresql","3.advanced/3.postgresql","i-lucide-database",{"title":79,"path":80,"stem":81,"icon":82},"Performance Guide","/advanced/performance","3.advanced/4.performance","i-lucide-gauge",{"title":84,"icon":85,"path":86,"stem":87,"children":88,"page":25},"API Reference","i-lucide-file-code","/api","4.api",[89,94,98,101],{"title":90,"path":91,"stem":92,"icon":93},"Engine","/api/engine","4.api/1.engine","i-lucide-cog",{"title":95,"path":96,"stem":97,"icon":41},"Collection","/api/collection","4.api/2.collection",{"title":33,"path":99,"stem":100,"icon":36},"/api/models","4.api/3.models",{"title":102,"path":103,"stem":104,"icon":105},"Exceptions","/api/exceptions","4.api/4.exceptions","i-lucide-alert-triangle",{"id":107,"title":95,"body":108,"description":7657,"extension":7658,"links":7659,"meta":7660,"navigation":7661,"path":96,"seo":7662,"stem":97,"__hash__":7663},"docs/4.api/2.collection.md",{"type":109,"value":110,"toc":7614},"minimark",[111,115,124,129,226,277,287,290,295,302,324,330,388,393,448,617,619,624,631,651,655,706,710,733,842,844,849,852,882,886,955,968,980,1150,1152,1157,1163,1187,1191,1240,1253,1355,1357,1362,1365,1390,1450,1454,1566,1572,2105,2126,2141,2253,2265,2270,2374,2401,2405,2431,2433,2437,2445,2468,2472,2507,2514,2647,2649,2654,2659,2687,2691,2807,2822,2826,2844,2909,2984,2986,2991,3000,3019,3023,3050,3054,3088,3212,3214,3219,3222,3241,3245,3272,3276,3292,3363,3365,3370,3373,3392,3396,3423,3427,3473,3534,3536,3541,3546,3604,3608,3640,3647,3651,3682,3855,3857,3862,3875,3905,3909,3974,3978,4004,4155,4157,4162,4168,4197,4201,4266,4273,4277,4292,4511,4513,4518,4524,4551,4555,4642,4646,4667,4829,4835,4879,4881,4886,4889,4905,4930,4934,5000,5096,5098,5103,5106,5122,5139,5247,5249,5254,5257,5260,5285,5305,5309,5336,5404,5415,5417,5422,5425,5444,5448,5475,5488,5557,5559,5564,5570,5585,5589,5622,5629,5712,5715,5717,5721,5739,5768,5772,5828,5835,5846,5964,5987,5989,5992,6017,6020,6064,6074,6076,6082,6089,6107,6118,6263,6265,6270,6276,6294,6303,6368,6370,6375,6382,6408,6413,6452,6588,6594,6596,6601,6604,6628,6632,6667,6785,6808,6810,6815,6818,6840,6844,6879,6888,6978,6980,6985,6991,7024,7028,7065,7070,7101,7289,7291,7296,7299,7317,7392,7394,7398,7436,7442,7531,7537,7610],[112,113,95],"h2",{"id":114},"collection",[116,117,118,119,123],"p",{},"A named collection of objects stored in a ",[120,121,122],"code",{},"{name}_objects"," table. Each object is a Pydantic model serialized as a JSON blob alongside standard metadata columns.",[125,126,128],"h3",{"id":127},"constructor","Constructor",[130,131,136],"pre",{"className":132,"code":133,"language":134,"meta":135,"style":135},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from centaurodb import Collection, Engine\n\nengine = Engine(\"my.db\")\ncoll = Collection(engine, \"monitoring\")\n","python","",[120,137,138,164,171,199],{"__ignoreMap":135},[139,140,143,147,151,154,157,161],"span",{"class":141,"line":142},"line",1,[139,144,146],{"class":145},"s7zQu","from",[139,148,150],{"class":149},"sTEyZ"," centaurodb ",[139,152,153],{"class":145},"import",[139,155,156],{"class":149}," Collection",[139,158,160],{"class":159},"sMK4o",",",[139,162,163],{"class":149}," Engine\n",[139,165,167],{"class":141,"line":166},2,[139,168,170],{"emptyLinePlaceholder":169},true,"\n",[139,172,174,177,180,184,187,190,194,196],{"class":141,"line":173},3,[139,175,176],{"class":149},"engine ",[139,178,179],{"class":159},"=",[139,181,183],{"class":182},"s2Zo4"," Engine",[139,185,186],{"class":159},"(",[139,188,189],{"class":159},"\"",[139,191,193],{"class":192},"sfazB","my.db",[139,195,189],{"class":159},[139,197,198],{"class":159},")\n",[139,200,202,205,207,209,211,214,216,219,222,224],{"class":141,"line":201},4,[139,203,204],{"class":149},"coll ",[139,206,179],{"class":159},[139,208,156],{"class":182},[139,210,186],{"class":159},[139,212,213],{"class":182},"engine",[139,215,160],{"class":159},[139,217,218],{"class":159}," \"",[139,220,221],{"class":192},"monitoring",[139,223,189],{"class":159},[139,225,198],{"class":159},[227,228,229,245],"table",{},[230,231,232],"thead",{},[233,234,235,239,242],"tr",{},[236,237,238],"th",{},"Parameter",[236,240,241],{},"Type",[236,243,244],{},"Description",[246,247,248,262],"tbody",{},[233,249,250,255,259],{},[251,252,253],"td",{},[120,254,213],{},[251,256,257],{},[120,258,90],{},[251,260,261],{},"The database engine",[233,263,264,269,274],{},[251,265,266],{},[120,267,268],{},"name",[251,270,271],{},[120,272,273],{},"str",[251,275,276],{},"Collection name — lowercase alphanumeric with underscores, must start with a letter",[116,278,279,280,283,284,286],{},"The table ",[120,281,282],{},"monitoring_objects"," is created on first instantiation if it doesn't already exist. Creating a ",[120,285,95],{}," with the same name twice is safe and idempotent.",[288,289],"hr",{},[125,291,293],{"id":292},"write_object",[120,294,292],{},[116,296,297,298,301],{},"Insert a new object into the collection. Sets ",[120,299,300],{},"obj.row"," and marks the object as persisted.",[130,303,305],{"className":132,"code":304,"language":134,"meta":135,"style":135},"coll.write_object(obj)\n",[120,306,307],{"__ignoreMap":135},[139,308,309,312,315,317,319,322],{"class":141,"line":142},[139,310,311],{"class":149},"coll",[139,313,314],{"class":159},".",[139,316,292],{"class":182},[139,318,186],{"class":159},[139,320,321],{"class":182},"obj",[139,323,198],{"class":159},[116,325,326],{},[327,328,329],"strong",{},"Parameters",[227,331,332,345],{},[230,333,334],{},[233,335,336,338,340,343],{},[236,337,238],{},[236,339,241],{},[236,341,342],{},"Default",[236,344,244],{},[246,346,347,364],{},[233,348,349,353,358,361],{},[251,350,351],{},[120,352,321],{},[251,354,355],{},[120,356,357],{},"CentauroModel",[251,359,360],{},"—",[251,362,363],{},"The model instance to persist",[233,365,366,371,376,381],{},[251,367,368],{},[120,369,370],{},"duplicate",[251,372,373],{},[120,374,375],{},"bool",[251,377,378],{},[120,379,380],{},"False",[251,382,383,384,387],{},"If ",[120,385,386],{},"True",", insert a new row even if this object was already written",[116,389,390],{},[327,391,392],{},"Raises",[394,395,396,413,429],"ul",{},[397,398,399,406,407,409,410],"li",{},[400,401,403],"a",{"href":402},"/api/exceptions#objectalreadypersistederror",[120,404,405],{},"ObjectAlreadyPersistedError"," — if ",[120,408,321],{}," was already written and ",[120,411,412],{},"duplicate=False",[397,414,415,421,422,425,426],{},[400,416,418],{"href":417},"/api/exceptions#unlinkedparenterror",[120,419,420],{},"UnlinkedParentError"," — if the object has any ",[120,423,424],{},"parent_ref"," fields that are still ",[120,427,428],{},"None",[397,430,431,406,434,436,437,439,440,443,444,447],{},[120,432,433],{},"TypeError",[120,435,321],{}," is not a ",[120,438,357],{}," instance, or if it is a ",[120,441,442],{},"CentauroModelSeries"," (use ",[120,445,446],{},"TimeSeriesCollection"," for those)",[130,449,451],{"className":132,"code":450,"language":134,"meta":135,"style":135},"sensor = Sensor(unit=\"Celsius\", location=\"pelion\")\ncoll.write_object(sensor)\n\nprint(sensor.row.id)          # 1\nprint(sensor.row.write_time)  # datetime(...)\n\n# Insert a fresh copy of the same data as a new row\ncoll.write_object(sensor, duplicate=True)\nprint(sensor.row.id)          # 2\n",[120,452,453,494,509,513,540,563,568,574,595],{"__ignoreMap":135},[139,454,455,458,460,463,465,469,471,473,476,478,480,483,485,487,490,492],{"class":141,"line":142},[139,456,457],{"class":149},"sensor ",[139,459,179],{"class":159},[139,461,462],{"class":182}," Sensor",[139,464,186],{"class":159},[139,466,468],{"class":467},"sHdIc","unit",[139,470,179],{"class":159},[139,472,189],{"class":159},[139,474,475],{"class":192},"Celsius",[139,477,189],{"class":159},[139,479,160],{"class":159},[139,481,482],{"class":467}," location",[139,484,179],{"class":159},[139,486,189],{"class":159},[139,488,489],{"class":192},"pelion",[139,491,189],{"class":159},[139,493,198],{"class":159},[139,495,496,498,500,502,504,507],{"class":141,"line":166},[139,497,311],{"class":149},[139,499,314],{"class":159},[139,501,292],{"class":182},[139,503,186],{"class":159},[139,505,506],{"class":182},"sensor",[139,508,198],{"class":159},[139,510,511],{"class":141,"line":173},[139,512,170],{"emptyLinePlaceholder":169},[139,514,515,518,520,522,524,528,530,533,536],{"class":141,"line":201},[139,516,517],{"class":182},"print",[139,519,186],{"class":159},[139,521,506],{"class":182},[139,523,314],{"class":159},[139,525,527],{"class":526},"swJcz","row",[139,529,314],{"class":159},[139,531,532],{"class":526},"id",[139,534,535],{"class":159},")",[139,537,539],{"class":538},"sHwdD","          # 1\n",[139,541,543,545,547,549,551,553,555,558,560],{"class":141,"line":542},5,[139,544,517],{"class":182},[139,546,186],{"class":159},[139,548,506],{"class":182},[139,550,314],{"class":159},[139,552,527],{"class":526},[139,554,314],{"class":159},[139,556,557],{"class":526},"write_time",[139,559,535],{"class":159},[139,561,562],{"class":538},"  # datetime(...)\n",[139,564,566],{"class":141,"line":565},6,[139,567,170],{"emptyLinePlaceholder":169},[139,569,571],{"class":141,"line":570},7,[139,572,573],{"class":538},"# Insert a fresh copy of the same data as a new row\n",[139,575,577,579,581,583,585,587,589,592],{"class":141,"line":576},8,[139,578,311],{"class":149},[139,580,314],{"class":159},[139,582,292],{"class":182},[139,584,186],{"class":159},[139,586,506],{"class":182},[139,588,160],{"class":159},[139,590,591],{"class":467}," duplicate",[139,593,594],{"class":159},"=True)\n",[139,596,598,600,602,604,606,608,610,612,614],{"class":141,"line":597},9,[139,599,517],{"class":182},[139,601,186],{"class":159},[139,603,506],{"class":182},[139,605,314],{"class":159},[139,607,527],{"class":526},[139,609,314],{"class":159},[139,611,532],{"class":526},[139,613,535],{"class":159},[139,615,616],{"class":538},"          # 2\n",[288,618],{},[125,620,622],{"id":621},"write_objects",[120,623,621],{},[116,625,626,627,630],{},"Insert multiple objects in a single atomic transaction. If any object fails validation, ",[327,628,629],{},"none"," are persisted and the transaction is rolled back.",[130,632,634],{"className":132,"code":633,"language":134,"meta":135,"style":135},"coll.write_objects(objs)\n",[120,635,636],{"__ignoreMap":135},[139,637,638,640,642,644,646,649],{"class":141,"line":142},[139,639,311],{"class":149},[139,641,314],{"class":159},[139,643,621],{"class":182},[139,645,186],{"class":159},[139,647,648],{"class":182},"objs",[139,650,198],{"class":159},[116,652,653],{},[327,654,329],{},[227,656,657,669],{},[230,658,659],{},[233,660,661,663,665,667],{},[236,662,238],{},[236,664,241],{},[236,666,342],{},[236,668,244],{},[246,670,671,687],{},[233,672,673,677,682,684],{},[251,674,675],{},[120,676,648],{},[251,678,679],{},[120,680,681],{},"Sequence[CentauroModel]",[251,683,360],{},[251,685,686],{},"A sequence of model instances to persist",[233,688,689,693,697,701],{},[251,690,691],{},[120,692,370],{},[251,694,695],{},[120,696,375],{},[251,698,699],{},[120,700,380],{},[251,702,383,703,705],{},[120,704,386],{},", force insert new rows even for already-written objects",[116,707,708],{},[327,709,392],{},[394,711,712,721],{},[397,713,714,718,719],{},[400,715,716],{"href":402},[120,717,405],{}," — if any object was already written and ",[120,720,412],{},[397,722,723,725,726,728,729,443,731,535],{},[120,724,433],{}," — if any element is not a ",[120,727,357],{}," instance, or is a ",[120,730,442],{},[120,732,446],{},[130,734,736],{"className":132,"code":735,"language":134,"meta":135,"style":135},"books = [Book(title=\"Dune\"), Book(title=\"Foundation\")]\ncoll.write_objects(books)\nprint(all(b.row.id for b in books))  # True — all persisted\n",[120,737,738,787,802],{"__ignoreMap":135},[139,739,740,743,745,748,751,753,756,758,760,763,765,768,771,773,775,777,779,782,784],{"class":141,"line":142},[139,741,742],{"class":149},"books ",[139,744,179],{"class":159},[139,746,747],{"class":159}," [",[139,749,750],{"class":182},"Book",[139,752,186],{"class":159},[139,754,755],{"class":467},"title",[139,757,179],{"class":159},[139,759,189],{"class":159},[139,761,762],{"class":192},"Dune",[139,764,189],{"class":159},[139,766,767],{"class":159},"),",[139,769,770],{"class":182}," Book",[139,772,186],{"class":159},[139,774,755],{"class":467},[139,776,179],{"class":159},[139,778,189],{"class":159},[139,780,781],{"class":192},"Foundation",[139,783,189],{"class":159},[139,785,786],{"class":159},")]\n",[139,788,789,791,793,795,797,800],{"class":141,"line":166},[139,790,311],{"class":149},[139,792,314],{"class":159},[139,794,621],{"class":182},[139,796,186],{"class":159},[139,798,799],{"class":182},"books",[139,801,198],{"class":159},[139,803,804,806,808,811,813,816,818,820,822,824,827,830,833,836,839],{"class":141,"line":173},[139,805,517],{"class":182},[139,807,186],{"class":159},[139,809,810],{"class":182},"all",[139,812,186],{"class":159},[139,814,815],{"class":182},"b",[139,817,314],{"class":159},[139,819,527],{"class":526},[139,821,314],{"class":159},[139,823,532],{"class":526},[139,825,826],{"class":145}," for",[139,828,829],{"class":182}," b ",[139,831,832],{"class":145},"in",[139,834,835],{"class":182}," books",[139,837,838],{"class":159},"))",[139,840,841],{"class":538},"  # True — all persisted\n",[288,843],{},[125,845,847],{"id":846},"read_object_by_id",[120,848,846],{},[116,850,851],{},"Read a single object from the collection by its row id.",[130,853,855],{"className":132,"code":854,"language":134,"meta":135,"style":135},"obj = coll.read_object_by_id(id, ModelClass)\n",[120,856,857],{"__ignoreMap":135},[139,858,859,862,864,867,869,871,873,875,877,880],{"class":141,"line":142},[139,860,861],{"class":149},"obj ",[139,863,179],{"class":159},[139,865,866],{"class":149}," coll",[139,868,314],{"class":159},[139,870,846],{"class":182},[139,872,186],{"class":159},[139,874,532],{"class":182},[139,876,160],{"class":159},[139,878,879],{"class":182}," ModelClass",[139,881,198],{"class":159},[116,883,884],{},[327,885,329],{},[227,887,888,900],{},[230,889,890],{},[233,891,892,894,896,898],{},[236,893,238],{},[236,895,241],{},[236,897,342],{},[236,899,244],{},[246,901,902,918,935],{},[233,903,904,908,913,915],{},[251,905,906],{},[120,907,532],{},[251,909,910],{},[120,911,912],{},"int",[251,914,360],{},[251,916,917],{},"Row id to look up",[233,919,920,925,930,932],{},[251,921,922],{},[120,923,924],{},"model_class",[251,926,927],{},[120,928,929],{},"type[CentauroModel]",[251,931,360],{},[251,933,934],{},"The model class to deserialize into",[233,936,937,942,946,950],{},[251,938,939],{},[120,940,941],{},"raw",[251,943,944],{},[120,945,375],{},[251,947,948],{},[120,949,380],{},[251,951,383,952,954],{},[120,953,386],{},", return the raw database row dict instead of a model instance",[116,956,957,960,961,964,965,314],{},[327,958,959],{},"Returns"," — a deserialized model instance, or a ",[120,962,963],{},"dict","-like row when ",[120,966,967],{},"raw=True",[116,969,970,972,973,979],{},[327,971,392],{}," — ",[400,974,976],{"href":975},"/api/exceptions#objectnotfounderror",[120,977,978],{},"ObjectNotFoundError"," if no row with that id exists.",[130,981,983],{"className":132,"code":982,"language":134,"meta":135,"style":135},"sensor = coll.read_object_by_id(1, Sensor)\nprint(sensor.unit)          # \"Celsius\"\nprint(sensor.row.id)        # 1\nprint(sensor.row.name)      # \"Sensor\"\n\n# Raw row — useful for debugging or direct SQL inspection\nrow = coll.read_object_by_id(1, Sensor, raw=True)\nprint(row[\"meta\"])          # '{\"unit\":\"Celsius\",\"location\":\"pelion\",...}'\nprint(row[\"write_time\"])    # \"2025-06-01T08:00:00+00:00\"\n",[120,984,985,1009,1026,1047,1068,1072,1077,1105,1129],{"__ignoreMap":135},[139,986,987,989,991,993,995,997,999,1003,1005,1007],{"class":141,"line":142},[139,988,457],{"class":149},[139,990,179],{"class":159},[139,992,866],{"class":149},[139,994,314],{"class":159},[139,996,846],{"class":182},[139,998,186],{"class":159},[139,1000,1002],{"class":1001},"sbssI","1",[139,1004,160],{"class":159},[139,1006,462],{"class":182},[139,1008,198],{"class":159},[139,1010,1011,1013,1015,1017,1019,1021,1023],{"class":141,"line":166},[139,1012,517],{"class":182},[139,1014,186],{"class":159},[139,1016,506],{"class":182},[139,1018,314],{"class":159},[139,1020,468],{"class":526},[139,1022,535],{"class":159},[139,1024,1025],{"class":538},"          # \"Celsius\"\n",[139,1027,1028,1030,1032,1034,1036,1038,1040,1042,1044],{"class":141,"line":173},[139,1029,517],{"class":182},[139,1031,186],{"class":159},[139,1033,506],{"class":182},[139,1035,314],{"class":159},[139,1037,527],{"class":526},[139,1039,314],{"class":159},[139,1041,532],{"class":526},[139,1043,535],{"class":159},[139,1045,1046],{"class":538},"        # 1\n",[139,1048,1049,1051,1053,1055,1057,1059,1061,1063,1065],{"class":141,"line":201},[139,1050,517],{"class":182},[139,1052,186],{"class":159},[139,1054,506],{"class":182},[139,1056,314],{"class":159},[139,1058,527],{"class":526},[139,1060,314],{"class":159},[139,1062,268],{"class":526},[139,1064,535],{"class":159},[139,1066,1067],{"class":538},"      # \"Sensor\"\n",[139,1069,1070],{"class":141,"line":542},[139,1071,170],{"emptyLinePlaceholder":169},[139,1073,1074],{"class":141,"line":565},[139,1075,1076],{"class":538},"# Raw row — useful for debugging or direct SQL inspection\n",[139,1078,1079,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1103],{"class":141,"line":570},[139,1080,1081],{"class":149},"row ",[139,1083,179],{"class":159},[139,1085,866],{"class":149},[139,1087,314],{"class":159},[139,1089,846],{"class":182},[139,1091,186],{"class":159},[139,1093,1002],{"class":1001},[139,1095,160],{"class":159},[139,1097,462],{"class":182},[139,1099,160],{"class":159},[139,1101,1102],{"class":467}," raw",[139,1104,594],{"class":159},[139,1106,1107,1109,1111,1113,1116,1118,1121,1123,1126],{"class":141,"line":576},[139,1108,517],{"class":182},[139,1110,186],{"class":159},[139,1112,527],{"class":182},[139,1114,1115],{"class":159},"[",[139,1117,189],{"class":159},[139,1119,1120],{"class":192},"meta",[139,1122,189],{"class":159},[139,1124,1125],{"class":159},"])",[139,1127,1128],{"class":538},"          # '{\"unit\":\"Celsius\",\"location\":\"pelion\",...}'\n",[139,1130,1131,1133,1135,1137,1139,1141,1143,1145,1147],{"class":141,"line":597},[139,1132,517],{"class":182},[139,1134,186],{"class":159},[139,1136,527],{"class":182},[139,1138,1115],{"class":159},[139,1140,189],{"class":159},[139,1142,557],{"class":192},[139,1144,189],{"class":159},[139,1146,1125],{"class":159},[139,1148,1149],{"class":538},"    # \"2025-06-01T08:00:00+00:00\"\n",[288,1151],{},[125,1153,1155],{"id":1154},"read_latest_object",[120,1156,1154],{},[116,1158,1159,1160,314],{},"Read the most recently edited object of a given type. Objects are ordered by ",[120,1161,1162],{},"edit_time DESC, id DESC",[130,1164,1166],{"className":132,"code":1165,"language":134,"meta":135,"style":135},"obj = coll.read_latest_object(ModelClass)\n",[120,1167,1168],{"__ignoreMap":135},[139,1169,1170,1172,1174,1176,1178,1180,1182,1185],{"class":141,"line":142},[139,1171,861],{"class":149},[139,1173,179],{"class":159},[139,1175,866],{"class":149},[139,1177,314],{"class":159},[139,1179,1154],{"class":182},[139,1181,186],{"class":159},[139,1183,1184],{"class":182},"ModelClass",[139,1186,198],{"class":159},[116,1188,1189],{},[327,1190,329],{},[227,1192,1193,1205],{},[230,1194,1195],{},[233,1196,1197,1199,1201,1203],{},[236,1198,238],{},[236,1200,241],{},[236,1202,342],{},[236,1204,244],{},[246,1206,1207,1222],{},[233,1208,1209,1213,1217,1219],{},[251,1210,1211],{},[120,1212,924],{},[251,1214,1215],{},[120,1216,929],{},[251,1218,360],{},[251,1220,1221],{},"The model class to query",[233,1223,1224,1228,1232,1236],{},[251,1225,1226],{},[120,1227,941],{},[251,1229,1230],{},[120,1231,375],{},[251,1233,1234],{},[120,1235,380],{},[251,1237,383,1238,954],{},[120,1239,386],{},[116,1241,1242,1244,1245,964,1247,1249,1250,1252],{},[327,1243,959],{}," — a deserialized model instance, a ",[120,1246,963],{},[120,1248,967],{},", or ",[120,1251,428],{}," if no objects of that type exist.",[130,1254,1256],{"className":132,"code":1255,"language":134,"meta":135,"style":135},"latest = coll.read_latest_object(Sensor)\nif latest:\n    print(latest.unit)\n    print(latest.row.edit_time)\n\n# Raw row\nrow = coll.read_latest_object(Sensor, raw=True)\n",[120,1257,1258,1278,1289,1305,1324,1328,1333],{"__ignoreMap":135},[139,1259,1260,1263,1265,1267,1269,1271,1273,1276],{"class":141,"line":142},[139,1261,1262],{"class":149},"latest ",[139,1264,179],{"class":159},[139,1266,866],{"class":149},[139,1268,314],{"class":159},[139,1270,1154],{"class":182},[139,1272,186],{"class":159},[139,1274,1275],{"class":182},"Sensor",[139,1277,198],{"class":159},[139,1279,1280,1283,1286],{"class":141,"line":166},[139,1281,1282],{"class":145},"if",[139,1284,1285],{"class":149}," latest",[139,1287,1288],{"class":159},":\n",[139,1290,1291,1294,1296,1299,1301,1303],{"class":141,"line":173},[139,1292,1293],{"class":182},"    print",[139,1295,186],{"class":159},[139,1297,1298],{"class":182},"latest",[139,1300,314],{"class":159},[139,1302,468],{"class":526},[139,1304,198],{"class":159},[139,1306,1307,1309,1311,1313,1315,1317,1319,1322],{"class":141,"line":201},[139,1308,1293],{"class":182},[139,1310,186],{"class":159},[139,1312,1298],{"class":182},[139,1314,314],{"class":159},[139,1316,527],{"class":526},[139,1318,314],{"class":159},[139,1320,1321],{"class":526},"edit_time",[139,1323,198],{"class":159},[139,1325,1326],{"class":141,"line":542},[139,1327,170],{"emptyLinePlaceholder":169},[139,1329,1330],{"class":141,"line":565},[139,1331,1332],{"class":538},"# Raw row\n",[139,1334,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353],{"class":141,"line":570},[139,1336,1081],{"class":149},[139,1338,179],{"class":159},[139,1340,866],{"class":149},[139,1342,314],{"class":159},[139,1344,1154],{"class":182},[139,1346,186],{"class":159},[139,1348,1275],{"class":182},[139,1350,160],{"class":159},[139,1352,1102],{"class":467},[139,1354,594],{"class":159},[288,1356],{},[125,1358,1360],{"id":1359},"read_objects",[120,1361,1359],{},[116,1363,1364],{},"Read objects from the collection, optionally filtered by conditions. Accepts three calling styles:",[1366,1367,1368,1374,1380],"ol",{},[397,1369,1370,1373],{},[327,1371,1372],{},"Model class"," — return all objects of that type",[397,1375,1376,1379],{},[327,1377,1378],{},"Conditions"," — return objects matching filters (model class inferred)",[397,1381,1382,1385,1386,1389],{},[327,1383,1384],{},"FieldProxy"," (legacy) — ",[120,1387,1388],{},"Model.fields"," alone returns all objects",[130,1391,1393],{"className":132,"code":1392,"language":134,"meta":135,"style":135},"results = coll.read_objects(Sensor)\nresults = coll.read_objects(Sensor.fields.unit == \"Celsius\")\n",[120,1394,1395,1414],{"__ignoreMap":135},[139,1396,1397,1400,1402,1404,1406,1408,1410,1412],{"class":141,"line":142},[139,1398,1399],{"class":149},"results ",[139,1401,179],{"class":159},[139,1403,866],{"class":149},[139,1405,314],{"class":159},[139,1407,1359],{"class":182},[139,1409,186],{"class":159},[139,1411,1275],{"class":182},[139,1413,198],{"class":159},[139,1415,1416,1418,1420,1422,1424,1426,1428,1430,1432,1435,1437,1439,1442,1444,1446,1448],{"class":141,"line":166},[139,1417,1399],{"class":149},[139,1419,179],{"class":159},[139,1421,866],{"class":149},[139,1423,314],{"class":159},[139,1425,1359],{"class":182},[139,1427,186],{"class":159},[139,1429,1275],{"class":182},[139,1431,314],{"class":159},[139,1433,1434],{"class":526},"fields",[139,1436,314],{"class":159},[139,1438,468],{"class":526},[139,1440,1441],{"class":159}," ==",[139,1443,218],{"class":159},[139,1445,475],{"class":192},[139,1447,189],{"class":159},[139,1449,198],{"class":159},[116,1451,1452],{},[327,1453,329],{},[227,1455,1456,1466],{},[230,1457,1458],{},[233,1459,1460,1462,1464],{},[236,1461,238],{},[236,1463,241],{},[236,1465,244],{},[246,1467,1468,1491,1506,1521,1535,1550],{},[233,1469,1470,1475,1488],{},[251,1471,1472],{},[120,1473,1474],{},"*args",[251,1476,1477,1479,1480,1479,1482,1479,1485],{},[120,1478,929],{}," or ",[120,1481,1384],{},[120,1483,1484],{},"Condition",[120,1486,1487],{},"OrGroup",[251,1489,1490],{},"Model class or query conditions — see examples",[233,1492,1493,1497,1501],{},[251,1494,1495],{},[120,1496,941],{},[251,1498,1499],{},[120,1500,375],{},[251,1502,383,1503,1505],{},[120,1504,386],{},", return raw rows instead of model instances",[233,1507,1508,1513,1518],{},[251,1509,1510],{},[120,1511,1512],{},"max_field",[251,1514,1515],{},[120,1516,1517],{},"Field",[251,1519,1520],{},"Select rows matching the maximum value of this field",[233,1522,1523,1528,1532],{},[251,1524,1525],{},[120,1526,1527],{},"min_field",[251,1529,1530],{},[120,1531,1517],{},[251,1533,1534],{},"Select rows matching the minimum value of this field",[233,1536,1537,1542,1547],{},[251,1538,1539],{},[120,1540,1541],{},"limit",[251,1543,1544],{},[120,1545,1546],{},"int | None",[251,1548,1549],{},"Maximum number of rows to return",[233,1551,1552,1557,1561],{},[251,1553,1554],{},[120,1555,1556],{},"offset",[251,1558,1559],{},[120,1560,1546],{},[251,1562,1563,1564],{},"Number of rows to skip — requires ",[120,1565,1541],{},[116,1567,1568,1569,1571],{},"Build conditions via ",[120,1570,1388],{},":",[130,1573,1575],{"className":132,"code":1574,"language":134,"meta":135,"style":135},"# All objects of a type (pass the class directly)\nall_sensors = coll.read_objects(Sensor)\n\n# Legacy style — also returns all objects of that type\nall_sensors = coll.read_objects(Sensor.fields)\n\n# Single equality condition\nresults = coll.read_objects(Sensor.fields.unit == \"Celsius\")\n\n# Multiple AND conditions (pass as separate arguments)\nresults = coll.read_objects(\n    Sensor.fields.unit == \"Celsius\",\n    Sensor.fields.threshold > 50,\n)\n\n# OR conditions\nresults = coll.read_objects(\n    (Sensor.fields.unit == \"Celsius\") | (Sensor.fields.unit == \"Kelvin\"),\n)\n\n# OR + AND\nresults = coll.read_objects(\n    (Sensor.fields.unit == \"Celsius\") | (Sensor.fields.unit == \"Kelvin\"),\n    Sensor.fields.threshold > 50,\n)\n\n# Aggregate: row(s) with the highest threshold\nresults = coll.read_objects(Sensor, max_field=Sensor.fields.threshold)\n\n# Aggregate: earliest sensor by write_time\nresults = coll.read_objects(Sensor, min_field=Sensor.fields.write_time)\n\n# Aggregate + filter: highest threshold among Celsius sensors\nresults = coll.read_objects(\n    Sensor.fields.unit == \"Celsius\",\n    max_field=Sensor.fields.threshold,\n)\n",[120,1576,1577,1582,1601,1605,1610,1632,1636,1641,1675,1679,1685,1701,1726,1748,1753,1758,1764,1779,1833,1838,1843,1849,1864,1913,1932,1937,1942,1948,1984,1989,1995,2031,2036,2042,2057,2080,2100],{"__ignoreMap":135},[139,1578,1579],{"class":141,"line":142},[139,1580,1581],{"class":538},"# All objects of a type (pass the class directly)\n",[139,1583,1584,1587,1589,1591,1593,1595,1597,1599],{"class":141,"line":166},[139,1585,1586],{"class":149},"all_sensors ",[139,1588,179],{"class":159},[139,1590,866],{"class":149},[139,1592,314],{"class":159},[139,1594,1359],{"class":182},[139,1596,186],{"class":159},[139,1598,1275],{"class":182},[139,1600,198],{"class":159},[139,1602,1603],{"class":141,"line":173},[139,1604,170],{"emptyLinePlaceholder":169},[139,1606,1607],{"class":141,"line":201},[139,1608,1609],{"class":538},"# Legacy style — also returns all objects of that type\n",[139,1611,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630],{"class":141,"line":542},[139,1613,1586],{"class":149},[139,1615,179],{"class":159},[139,1617,866],{"class":149},[139,1619,314],{"class":159},[139,1621,1359],{"class":182},[139,1623,186],{"class":159},[139,1625,1275],{"class":182},[139,1627,314],{"class":159},[139,1629,1434],{"class":526},[139,1631,198],{"class":159},[139,1633,1634],{"class":141,"line":565},[139,1635,170],{"emptyLinePlaceholder":169},[139,1637,1638],{"class":141,"line":570},[139,1639,1640],{"class":538},"# Single equality condition\n",[139,1642,1643,1645,1647,1649,1651,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673],{"class":141,"line":576},[139,1644,1399],{"class":149},[139,1646,179],{"class":159},[139,1648,866],{"class":149},[139,1650,314],{"class":159},[139,1652,1359],{"class":182},[139,1654,186],{"class":159},[139,1656,1275],{"class":182},[139,1658,314],{"class":159},[139,1660,1434],{"class":526},[139,1662,314],{"class":159},[139,1664,468],{"class":526},[139,1666,1441],{"class":159},[139,1668,218],{"class":159},[139,1670,475],{"class":192},[139,1672,189],{"class":159},[139,1674,198],{"class":159},[139,1676,1677],{"class":141,"line":597},[139,1678,170],{"emptyLinePlaceholder":169},[139,1680,1682],{"class":141,"line":1681},10,[139,1683,1684],{"class":538},"# Multiple AND conditions (pass as separate arguments)\n",[139,1686,1688,1690,1692,1694,1696,1698],{"class":141,"line":1687},11,[139,1689,1399],{"class":149},[139,1691,179],{"class":159},[139,1693,866],{"class":149},[139,1695,314],{"class":159},[139,1697,1359],{"class":182},[139,1699,1700],{"class":159},"(\n",[139,1702,1704,1707,1709,1711,1713,1715,1717,1719,1721,1723],{"class":141,"line":1703},12,[139,1705,1706],{"class":182},"    Sensor",[139,1708,314],{"class":159},[139,1710,1434],{"class":526},[139,1712,314],{"class":159},[139,1714,468],{"class":526},[139,1716,1441],{"class":159},[139,1718,218],{"class":159},[139,1720,475],{"class":192},[139,1722,189],{"class":159},[139,1724,1725],{"class":159},",\n",[139,1727,1729,1731,1733,1735,1737,1740,1743,1746],{"class":141,"line":1728},13,[139,1730,1706],{"class":182},[139,1732,314],{"class":159},[139,1734,1434],{"class":526},[139,1736,314],{"class":159},[139,1738,1739],{"class":526},"threshold",[139,1741,1742],{"class":159}," >",[139,1744,1745],{"class":1001}," 50",[139,1747,1725],{"class":159},[139,1749,1751],{"class":141,"line":1750},14,[139,1752,198],{"class":159},[139,1754,1756],{"class":141,"line":1755},15,[139,1757,170],{"emptyLinePlaceholder":169},[139,1759,1761],{"class":141,"line":1760},16,[139,1762,1763],{"class":538},"# OR conditions\n",[139,1765,1767,1769,1771,1773,1775,1777],{"class":141,"line":1766},17,[139,1768,1399],{"class":149},[139,1770,179],{"class":159},[139,1772,866],{"class":149},[139,1774,314],{"class":159},[139,1776,1359],{"class":182},[139,1778,1700],{"class":159},[139,1780,1782,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1808,1811,1813,1815,1817,1819,1821,1823,1825,1828,1830],{"class":141,"line":1781},18,[139,1783,1784],{"class":159},"    (",[139,1786,1275],{"class":182},[139,1788,314],{"class":159},[139,1790,1434],{"class":526},[139,1792,314],{"class":159},[139,1794,468],{"class":526},[139,1796,1441],{"class":159},[139,1798,218],{"class":159},[139,1800,475],{"class":192},[139,1802,189],{"class":159},[139,1804,535],{"class":159},[139,1806,1807],{"class":159}," |",[139,1809,1810],{"class":159}," (",[139,1812,1275],{"class":182},[139,1814,314],{"class":159},[139,1816,1434],{"class":526},[139,1818,314],{"class":159},[139,1820,468],{"class":526},[139,1822,1441],{"class":159},[139,1824,218],{"class":159},[139,1826,1827],{"class":192},"Kelvin",[139,1829,189],{"class":159},[139,1831,1832],{"class":159},"),\n",[139,1834,1836],{"class":141,"line":1835},19,[139,1837,198],{"class":159},[139,1839,1841],{"class":141,"line":1840},20,[139,1842,170],{"emptyLinePlaceholder":169},[139,1844,1846],{"class":141,"line":1845},21,[139,1847,1848],{"class":538},"# OR + AND\n",[139,1850,1852,1854,1856,1858,1860,1862],{"class":141,"line":1851},22,[139,1853,1399],{"class":149},[139,1855,179],{"class":159},[139,1857,866],{"class":149},[139,1859,314],{"class":159},[139,1861,1359],{"class":182},[139,1863,1700],{"class":159},[139,1865,1867,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911],{"class":141,"line":1866},23,[139,1868,1784],{"class":159},[139,1870,1275],{"class":182},[139,1872,314],{"class":159},[139,1874,1434],{"class":526},[139,1876,314],{"class":159},[139,1878,468],{"class":526},[139,1880,1441],{"class":159},[139,1882,218],{"class":159},[139,1884,475],{"class":192},[139,1886,189],{"class":159},[139,1888,535],{"class":159},[139,1890,1807],{"class":159},[139,1892,1810],{"class":159},[139,1894,1275],{"class":182},[139,1896,314],{"class":159},[139,1898,1434],{"class":526},[139,1900,314],{"class":159},[139,1902,468],{"class":526},[139,1904,1441],{"class":159},[139,1906,218],{"class":159},[139,1908,1827],{"class":192},[139,1910,189],{"class":159},[139,1912,1832],{"class":159},[139,1914,1916,1918,1920,1922,1924,1926,1928,1930],{"class":141,"line":1915},24,[139,1917,1706],{"class":182},[139,1919,314],{"class":159},[139,1921,1434],{"class":526},[139,1923,314],{"class":159},[139,1925,1739],{"class":526},[139,1927,1742],{"class":159},[139,1929,1745],{"class":1001},[139,1931,1725],{"class":159},[139,1933,1935],{"class":141,"line":1934},25,[139,1936,198],{"class":159},[139,1938,1940],{"class":141,"line":1939},26,[139,1941,170],{"emptyLinePlaceholder":169},[139,1943,1945],{"class":141,"line":1944},27,[139,1946,1947],{"class":538},"# Aggregate: row(s) with the highest threshold\n",[139,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1970,1972,1974,1976,1978,1980,1982],{"class":141,"line":1950},28,[139,1952,1399],{"class":149},[139,1954,179],{"class":159},[139,1956,866],{"class":149},[139,1958,314],{"class":159},[139,1960,1359],{"class":182},[139,1962,186],{"class":159},[139,1964,1275],{"class":182},[139,1966,160],{"class":159},[139,1968,1969],{"class":467}," max_field",[139,1971,179],{"class":159},[139,1973,1275],{"class":182},[139,1975,314],{"class":159},[139,1977,1434],{"class":526},[139,1979,314],{"class":159},[139,1981,1739],{"class":526},[139,1983,198],{"class":159},[139,1985,1987],{"class":141,"line":1986},29,[139,1988,170],{"emptyLinePlaceholder":169},[139,1990,1992],{"class":141,"line":1991},30,[139,1993,1994],{"class":538},"# Aggregate: earliest sensor by write_time\n",[139,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2017,2019,2021,2023,2025,2027,2029],{"class":141,"line":1997},31,[139,1999,1399],{"class":149},[139,2001,179],{"class":159},[139,2003,866],{"class":149},[139,2005,314],{"class":159},[139,2007,1359],{"class":182},[139,2009,186],{"class":159},[139,2011,1275],{"class":182},[139,2013,160],{"class":159},[139,2015,2016],{"class":467}," min_field",[139,2018,179],{"class":159},[139,2020,1275],{"class":182},[139,2022,314],{"class":159},[139,2024,1434],{"class":526},[139,2026,314],{"class":159},[139,2028,557],{"class":526},[139,2030,198],{"class":159},[139,2032,2034],{"class":141,"line":2033},32,[139,2035,170],{"emptyLinePlaceholder":169},[139,2037,2039],{"class":141,"line":2038},33,[139,2040,2041],{"class":538},"# Aggregate + filter: highest threshold among Celsius sensors\n",[139,2043,2045,2047,2049,2051,2053,2055],{"class":141,"line":2044},34,[139,2046,1399],{"class":149},[139,2048,179],{"class":159},[139,2050,866],{"class":149},[139,2052,314],{"class":159},[139,2054,1359],{"class":182},[139,2056,1700],{"class":159},[139,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078],{"class":141,"line":2059},35,[139,2061,1706],{"class":182},[139,2063,314],{"class":159},[139,2065,1434],{"class":526},[139,2067,314],{"class":159},[139,2069,468],{"class":526},[139,2071,1441],{"class":159},[139,2073,218],{"class":159},[139,2075,475],{"class":192},[139,2077,189],{"class":159},[139,2079,1725],{"class":159},[139,2081,2083,2086,2088,2090,2092,2094,2096,2098],{"class":141,"line":2082},36,[139,2084,2085],{"class":467},"    max_field",[139,2087,179],{"class":159},[139,2089,1275],{"class":182},[139,2091,314],{"class":159},[139,2093,1434],{"class":526},[139,2095,314],{"class":159},[139,2097,1739],{"class":526},[139,2099,1725],{"class":159},[139,2101,2103],{"class":141,"line":2102},37,[139,2104,198],{"class":159},[116,2106,2107,2109,2110,2112,2113,2115,2116,2115,2119,1249,2122,2125],{},[120,2108,1512],{}," / ",[120,2111,1527],{}," only work with ",[120,2114,912],{},", ",[120,2117,2118],{},"float",[120,2120,2121],{},"date",[120,2123,2124],{},"datetime"," fields. They are mutually exclusive — pass only one at a time.",[116,2127,2128,2129,2109,2131,2133,2134,2140],{},"Paginate with ",[120,2130,1541],{},[120,2132,1556],{}," — combine with ",[400,2135,2137],{"href":2136},"#count_objects",[120,2138,2139],{},"count_objects"," to drive a pager:",[130,2142,2144],{"className":132,"code":2143,"language":134,"meta":135,"style":135},"# First page of 20\npage = coll.read_objects(Sensor, limit=20)\n\n# Third page\npage = coll.read_objects(Sensor, limit=20, offset=40)\n\n# Total for the pager UI\ntotal = coll.count_objects(Sensor)\n",[120,2145,2146,2151,2180,2184,2189,2225,2229,2234],{"__ignoreMap":135},[139,2147,2148],{"class":141,"line":142},[139,2149,2150],{"class":538},"# First page of 20\n",[139,2152,2153,2156,2158,2160,2162,2164,2166,2168,2170,2173,2175,2178],{"class":141,"line":166},[139,2154,2155],{"class":149},"page ",[139,2157,179],{"class":159},[139,2159,866],{"class":149},[139,2161,314],{"class":159},[139,2163,1359],{"class":182},[139,2165,186],{"class":159},[139,2167,1275],{"class":182},[139,2169,160],{"class":159},[139,2171,2172],{"class":467}," limit",[139,2174,179],{"class":159},[139,2176,2177],{"class":1001},"20",[139,2179,198],{"class":159},[139,2181,2182],{"class":141,"line":173},[139,2183,170],{"emptyLinePlaceholder":169},[139,2185,2186],{"class":141,"line":201},[139,2187,2188],{"class":538},"# Third page\n",[139,2190,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2218,2220,2223],{"class":141,"line":542},[139,2192,2155],{"class":149},[139,2194,179],{"class":159},[139,2196,866],{"class":149},[139,2198,314],{"class":159},[139,2200,1359],{"class":182},[139,2202,186],{"class":159},[139,2204,1275],{"class":182},[139,2206,160],{"class":159},[139,2208,2172],{"class":467},[139,2210,179],{"class":159},[139,2212,2177],{"class":1001},[139,2214,160],{"class":159},[139,2216,2217],{"class":467}," offset",[139,2219,179],{"class":159},[139,2221,2222],{"class":1001},"40",[139,2224,198],{"class":159},[139,2226,2227],{"class":141,"line":565},[139,2228,170],{"emptyLinePlaceholder":169},[139,2230,2231],{"class":141,"line":570},[139,2232,2233],{"class":538},"# Total for the pager UI\n",[139,2235,2236,2239,2241,2243,2245,2247,2249,2251],{"class":141,"line":576},[139,2237,2238],{"class":149},"total ",[139,2240,179],{"class":159},[139,2242,866],{"class":149},[139,2244,314],{"class":159},[139,2246,2139],{"class":182},[139,2248,186],{"class":159},[139,2250,1275],{"class":182},[139,2252,198],{"class":159},[116,2254,2255,2257,2258,2260,2261,2264],{},[120,2256,1556],{}," without ",[120,2259,1541],{}," raises ",[120,2262,2263],{},"ValueError"," — pagination without an upper bound is rejected to avoid unbounded reads.",[116,2266,2267],{},[327,2268,2269],{},"Available operators on field conditions",[227,2271,2272,2282],{},[230,2273,2274],{},[233,2275,2276,2279],{},[236,2277,2278],{},"Operator",[236,2280,2281],{},"Example",[246,2283,2284,2296,2308,2323,2338,2350,2362],{},[233,2285,2286,2291],{},[251,2287,2288],{},[120,2289,2290],{},"==",[251,2292,2293],{},[120,2294,2295],{},"Sensor.fields.unit == \"Celsius\"",[233,2297,2298,2303],{},[251,2299,2300],{},[120,2301,2302],{},"!=",[251,2304,2305],{},[120,2306,2307],{},"Sensor.fields.unit != \"Fahrenheit\"",[233,2309,2310,2318],{},[251,2311,2312,2109,2315],{},[120,2313,2314],{},">",[120,2316,2317],{},">=",[251,2319,2320],{},[120,2321,2322],{},"Sensor.fields.threshold > 50",[233,2324,2325,2333],{},[251,2326,2327,2109,2330],{},[120,2328,2329],{},"\u003C",[120,2331,2332],{},"\u003C=",[251,2334,2335],{},[120,2336,2337],{},"Sensor.fields.threshold \u003C= 100",[233,2339,2340,2345],{},[251,2341,2342],{},[120,2343,2344],{},".like(pattern)",[251,2346,2347],{},[120,2348,2349],{},"Sensor.fields.location.like(\"lab%\")",[233,2351,2352,2357],{},[251,2353,2354],{},[120,2355,2356],{},".is_in(values)",[251,2358,2359],{},[120,2360,2361],{},"Sensor.fields.unit.is_in([\"Celsius\", \"Kelvin\"])",[233,2363,2364,2369],{},[251,2365,2366],{},[120,2367,2368],{},"|",[251,2370,2371],{},[120,2372,2373],{},"(cond_a) | (cond_b)",[2375,2376,2377,2379,2380,2115,2382,2115,2384,2386,2387,2389,2390,2393,2394,2396,2397,2400],"callout",{"icon":14},[120,2378,1388],{}," supports ",[120,2381,532],{},[120,2383,557],{},[120,2385,1321],{},", and all user-defined fields. The ",[120,2388,268],{}," column is ",[327,2391,2392],{},"not"," queryable via ",[120,2395,1388],{}," — results are already filtered to the model's ",[120,2398,2399],{},"__centauro_name__"," automatically.",[116,2402,2403],{},[327,2404,392],{},[394,2406,2407,2415],{},[397,2408,2409,2411,2412,2414],{},[120,2410,433],{}," — if no arguments are given, or ",[120,2413,1388],{}," is mixed with other conditions",[397,2416,2417,2419,2420,2422,2423,2425,2426,2428,2429],{},[120,2418,2263],{}," — if conditions reference different model classes, or an unknown field name, or if ",[120,2421,1541],{},"/",[120,2424,1556],{}," are negative, or if ",[120,2427,1556],{}," is passed without ",[120,2430,1541],{},[288,2432],{},[125,2434,2435],{"id":2139},[120,2436,2139],{},[116,2438,2439,2440,2442,2443,314],{},"Count objects matching a query without materializing any rows. Accepts the same calling styles as ",[120,2441,1359],{},"; results are always filtered to the model's ",[120,2444,2399],{},[130,2446,2448],{"className":132,"code":2447,"language":134,"meta":135,"style":135},"total = coll.count_objects(Sensor)\n",[120,2449,2450],{"__ignoreMap":135},[139,2451,2452,2454,2456,2458,2460,2462,2464,2466],{"class":141,"line":142},[139,2453,2238],{"class":149},[139,2455,179],{"class":159},[139,2457,866],{"class":149},[139,2459,314],{"class":159},[139,2461,2139],{"class":182},[139,2463,186],{"class":159},[139,2465,1275],{"class":182},[139,2467,198],{"class":159},[116,2469,2470],{},[327,2471,329],{},[227,2473,2474,2484],{},[230,2475,2476],{},[233,2477,2478,2480,2482],{},[236,2479,238],{},[236,2481,241],{},[236,2483,244],{},[246,2485,2486],{},[233,2487,2488,2492,2502],{},[251,2489,2490],{},[120,2491,1474],{},[251,2493,2494,1479,2496,1479,2498,1479,2500],{},[120,2495,929],{},[120,2497,1384],{},[120,2499,1484],{},[120,2501,1487],{},[251,2503,2504,2505],{},"Model class or query conditions — same as ",[120,2506,1359],{},[116,2508,2509,972,2511,2513],{},[327,2510,959],{},[120,2512,912],{},", the number of matching rows.",[130,2515,2517],{"className":132,"code":2516,"language":134,"meta":135,"style":135},"# Count all sensors\ntotal = coll.count_objects(Sensor)\n\n# Count with conditions\ncelsius = coll.count_objects(Sensor.fields.unit == \"Celsius\")\n\n# Pairs with limit/offset for client-side paging\ntotal = coll.count_objects(Sensor)\npage = coll.read_objects(Sensor, limit=20, offset=40)\n",[120,2518,2519,2524,2542,2546,2551,2586,2590,2595,2613],{"__ignoreMap":135},[139,2520,2521],{"class":141,"line":142},[139,2522,2523],{"class":538},"# Count all sensors\n",[139,2525,2526,2528,2530,2532,2534,2536,2538,2540],{"class":141,"line":166},[139,2527,2238],{"class":149},[139,2529,179],{"class":159},[139,2531,866],{"class":149},[139,2533,314],{"class":159},[139,2535,2139],{"class":182},[139,2537,186],{"class":159},[139,2539,1275],{"class":182},[139,2541,198],{"class":159},[139,2543,2544],{"class":141,"line":173},[139,2545,170],{"emptyLinePlaceholder":169},[139,2547,2548],{"class":141,"line":201},[139,2549,2550],{"class":538},"# Count with conditions\n",[139,2552,2553,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584],{"class":141,"line":542},[139,2554,2555],{"class":149},"celsius ",[139,2557,179],{"class":159},[139,2559,866],{"class":149},[139,2561,314],{"class":159},[139,2563,2139],{"class":182},[139,2565,186],{"class":159},[139,2567,1275],{"class":182},[139,2569,314],{"class":159},[139,2571,1434],{"class":526},[139,2573,314],{"class":159},[139,2575,468],{"class":526},[139,2577,1441],{"class":159},[139,2579,218],{"class":159},[139,2581,475],{"class":192},[139,2583,189],{"class":159},[139,2585,198],{"class":159},[139,2587,2588],{"class":141,"line":565},[139,2589,170],{"emptyLinePlaceholder":169},[139,2591,2592],{"class":141,"line":570},[139,2593,2594],{"class":538},"# Pairs with limit/offset for client-side paging\n",[139,2596,2597,2599,2601,2603,2605,2607,2609,2611],{"class":141,"line":576},[139,2598,2238],{"class":149},[139,2600,179],{"class":159},[139,2602,866],{"class":149},[139,2604,314],{"class":159},[139,2606,2139],{"class":182},[139,2608,186],{"class":159},[139,2610,1275],{"class":182},[139,2612,198],{"class":159},[139,2614,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645],{"class":141,"line":597},[139,2616,2155],{"class":149},[139,2618,179],{"class":159},[139,2620,866],{"class":149},[139,2622,314],{"class":159},[139,2624,1359],{"class":182},[139,2626,186],{"class":159},[139,2628,1275],{"class":182},[139,2630,160],{"class":159},[139,2632,2172],{"class":467},[139,2634,179],{"class":159},[139,2636,2177],{"class":1001},[139,2638,160],{"class":159},[139,2640,2217],{"class":467},[139,2642,179],{"class":159},[139,2644,2222],{"class":1001},[139,2646,198],{"class":159},[288,2648],{},[125,2650,2652],{"id":2651},"aggregate",[120,2653,2651],{},[116,2655,2656,2657,314],{},"Run an aggregate query over objects matching the same calling styles as ",[120,2658,1359],{},[130,2660,2662],{"className":132,"code":2661,"language":134,"meta":135,"style":135},"total = coll.aggregate(Sensor, count=True)\n",[120,2663,2664],{"__ignoreMap":135},[139,2665,2666,2668,2670,2672,2674,2676,2678,2680,2682,2685],{"class":141,"line":142},[139,2667,2238],{"class":149},[139,2669,179],{"class":159},[139,2671,866],{"class":149},[139,2673,314],{"class":159},[139,2675,2651],{"class":182},[139,2677,186],{"class":159},[139,2679,1275],{"class":182},[139,2681,160],{"class":159},[139,2683,2684],{"class":467}," count",[139,2686,594],{"class":159},[116,2688,2689],{},[327,2690,329],{},[227,2692,2693,2705],{},[230,2694,2695],{},[233,2696,2697,2699,2701,2703],{},[236,2698,238],{},[236,2700,241],{},[236,2702,342],{},[236,2704,244],{},[246,2706,2707,2728,2748,2769,2788],{},[233,2708,2709,2713,2723,2725],{},[251,2710,2711],{},[120,2712,1474],{},[251,2714,2715,1479,2717,1479,2719,1479,2721],{},[120,2716,929],{},[120,2718,1384],{},[120,2720,1484],{},[120,2722,1487],{},[251,2724,360],{},[251,2726,2727],{},"Model class or query conditions",[233,2729,2730,2735,2739,2743],{},[251,2731,2732],{},[120,2733,2734],{},"count",[251,2736,2737],{},[120,2738,375],{},[251,2740,2741],{},[120,2742,380],{},[251,2744,383,2745,2747],{},[120,2746,386],{},", return the matching row count",[233,2749,2750,2755,2759,2763],{},[251,2751,2752],{},[120,2753,2754],{},"sum",[251,2756,2757],{},[120,2758,1517],{},[251,2760,2761],{},[120,2762,428],{},[251,2764,2765,2766],{},"Reserved — raises ",[120,2767,2768],{},"NotImplementedError",[233,2770,2771,2776,2780,2784],{},[251,2772,2773],{},[120,2774,2775],{},"avg",[251,2777,2778],{},[120,2779,1517],{},[251,2781,2782],{},[120,2783,428],{},[251,2785,2765,2786],{},[120,2787,2768],{},[233,2789,2790,2795,2799,2803],{},[251,2791,2792],{},[120,2793,2794],{},"group_by",[251,2796,2797],{},[120,2798,1517],{},[251,2800,2801],{},[120,2802,428],{},[251,2804,2765,2805],{},[120,2806,2768],{},[116,2808,2809,972,2811,2813,2814,2817,2818,2821],{},[327,2810,959],{},[120,2812,912],{}," when ",[120,2815,2816],{},"count=True",". The return type is deliberately wide (",[120,2819,2820],{},"int | float | dict | polars.DataFrame",") so future aggregates won't change the signature.",[116,2823,2824],{},[327,2825,392],{},[394,2827,2828,2833],{},[397,2829,2830,2832],{},[120,2831,2263],{}," — if no aggregate is requested",[397,2834,2835,406,2837,2115,2839,1249,2841,2843],{},[120,2836,2768],{},[120,2838,2754],{},[120,2840,2775],{},[120,2842,2794],{}," are passed",[2845,2846,2847,2874],"warning",{},[116,2848,2849,2850,2852,2853,2115,2855,2857,2858,2860,2861,2863,2864,2867,2868,1571],{},"As of 0.9.0 only ",[120,2851,2816],{}," is implemented. ",[120,2854,2754],{},[120,2856,2775],{},", and ",[120,2859,2794],{}," are reserved keywords that raise ",[120,2862,2768],{}," — the signature is locked now so code written today keeps working when they ship. For SQL aggregations today, create a ",[400,2865,2866],{"href":44},"view"," and use ",[400,2869,2871],{"href":2870},"#sql_select",[120,2872,2873],{},"sql_select",[130,2875,2877],{"className":132,"code":2876,"language":134,"meta":135,"style":135},"df = coll.sql_select(\n    \"SELECT unit, AVG(threshold) FROM monitoring_view_dashboard GROUP BY unit\"\n)\n",[120,2878,2879,2894,2905],{"__ignoreMap":135},[139,2880,2881,2884,2886,2888,2890,2892],{"class":141,"line":142},[139,2882,2883],{"class":149},"df ",[139,2885,179],{"class":159},[139,2887,866],{"class":149},[139,2889,314],{"class":159},[139,2891,2873],{"class":182},[139,2893,1700],{"class":159},[139,2895,2896,2899,2902],{"class":141,"line":166},[139,2897,2898],{"class":159},"    \"",[139,2900,2901],{"class":192},"SELECT unit, AVG(threshold) FROM monitoring_view_dashboard GROUP BY unit",[139,2903,2904],{"class":159},"\"\n",[139,2906,2907],{"class":141,"line":173},[139,2908,198],{"class":159},[130,2910,2912],{"className":132,"code":2911,"language":134,"meta":135,"style":135},"# Equivalent to count_objects(Sensor)\ntotal = coll.aggregate(Sensor, count=True)\n\n# Count with conditions\nhot = coll.aggregate(Sensor.fields.threshold > 50, count=True)\n",[120,2913,2914,2919,2941,2945,2949],{"__ignoreMap":135},[139,2915,2916],{"class":141,"line":142},[139,2917,2918],{"class":538},"# Equivalent to count_objects(Sensor)\n",[139,2920,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939],{"class":141,"line":166},[139,2922,2238],{"class":149},[139,2924,179],{"class":159},[139,2926,866],{"class":149},[139,2928,314],{"class":159},[139,2930,2651],{"class":182},[139,2932,186],{"class":159},[139,2934,1275],{"class":182},[139,2936,160],{"class":159},[139,2938,2684],{"class":467},[139,2940,594],{"class":159},[139,2942,2943],{"class":141,"line":173},[139,2944,170],{"emptyLinePlaceholder":169},[139,2946,2947],{"class":141,"line":201},[139,2948,2550],{"class":538},[139,2950,2951,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982],{"class":141,"line":542},[139,2952,2953],{"class":149},"hot ",[139,2955,179],{"class":159},[139,2957,866],{"class":149},[139,2959,314],{"class":159},[139,2961,2651],{"class":182},[139,2963,186],{"class":159},[139,2965,1275],{"class":182},[139,2967,314],{"class":159},[139,2969,1434],{"class":526},[139,2971,314],{"class":159},[139,2973,1739],{"class":526},[139,2975,1742],{"class":159},[139,2977,1745],{"class":1001},[139,2979,160],{"class":159},[139,2981,2684],{"class":467},[139,2983,594],{"class":159},[288,2985],{},[125,2987,2989],{"id":2988},"update_object",[120,2990,2988],{},[116,2992,2993,2994,2996,2997,2999],{},"Persist the current state of an already-written object. Updates ",[120,2995,1321],{},"; ",[120,2998,557],{}," is preserved.",[130,3001,3003],{"className":132,"code":3002,"language":134,"meta":135,"style":135},"coll.update_object(obj)\n",[120,3004,3005],{"__ignoreMap":135},[139,3006,3007,3009,3011,3013,3015,3017],{"class":141,"line":142},[139,3008,311],{"class":149},[139,3010,314],{"class":159},[139,3012,2988],{"class":182},[139,3014,186],{"class":159},[139,3016,321],{"class":182},[139,3018,198],{"class":159},[116,3020,3021],{},[327,3022,329],{},[227,3024,3025,3035],{},[230,3026,3027],{},[233,3028,3029,3031,3033],{},[236,3030,238],{},[236,3032,241],{},[236,3034,244],{},[246,3036,3037],{},[233,3038,3039,3043,3047],{},[251,3040,3041],{},[120,3042,321],{},[251,3044,3045],{},[120,3046,357],{},[251,3048,3049],{},"A previously persisted model instance",[116,3051,3052],{},[327,3053,392],{},[394,3055,3056,3067,3079],{},[397,3057,3058,406,3064,3066],{},[400,3059,3061],{"href":3060},"/api/exceptions#objectnotpersistederror",[120,3062,3063],{},"ObjectNotPersistedError",[120,3065,292],{}," was never called on this instance",[397,3068,3069,3073,3074,3076,3077],{},[400,3070,3071],{"href":417},[120,3072,420],{}," — if any ",[120,3075,424],{}," fields are ",[120,3078,428],{},[397,3080,3081,406,3083,436,3085,3087],{},[120,3082,433],{},[120,3084,321],{},[120,3086,357],{}," instance",[130,3089,3091],{"className":132,"code":3090,"language":134,"meta":135,"style":135},"sensor = coll.read_object_by_id(1, Sensor)\nsensor.unit = \"Kelvin\"\ncoll.update_object(sensor)\n\nrefreshed = coll.read_object_by_id(1, Sensor)\nprint(refreshed.unit)           # \"Kelvin\"\nprint(refreshed.row.edit_time)  # updated timestamp\n",[120,3092,3093,3115,3132,3146,3150,3173,3191],{"__ignoreMap":135},[139,3094,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113],{"class":141,"line":142},[139,3096,457],{"class":149},[139,3098,179],{"class":159},[139,3100,866],{"class":149},[139,3102,314],{"class":159},[139,3104,846],{"class":182},[139,3106,186],{"class":159},[139,3108,1002],{"class":1001},[139,3110,160],{"class":159},[139,3112,462],{"class":182},[139,3114,198],{"class":159},[139,3116,3117,3119,3121,3123,3126,3128,3130],{"class":141,"line":166},[139,3118,506],{"class":149},[139,3120,314],{"class":159},[139,3122,468],{"class":526},[139,3124,3125],{"class":159}," =",[139,3127,218],{"class":159},[139,3129,1827],{"class":192},[139,3131,2904],{"class":159},[139,3133,3134,3136,3138,3140,3142,3144],{"class":141,"line":173},[139,3135,311],{"class":149},[139,3137,314],{"class":159},[139,3139,2988],{"class":182},[139,3141,186],{"class":159},[139,3143,506],{"class":182},[139,3145,198],{"class":159},[139,3147,3148],{"class":141,"line":201},[139,3149,170],{"emptyLinePlaceholder":169},[139,3151,3152,3155,3157,3159,3161,3163,3165,3167,3169,3171],{"class":141,"line":542},[139,3153,3154],{"class":149},"refreshed ",[139,3156,179],{"class":159},[139,3158,866],{"class":149},[139,3160,314],{"class":159},[139,3162,846],{"class":182},[139,3164,186],{"class":159},[139,3166,1002],{"class":1001},[139,3168,160],{"class":159},[139,3170,462],{"class":182},[139,3172,198],{"class":159},[139,3174,3175,3177,3179,3182,3184,3186,3188],{"class":141,"line":565},[139,3176,517],{"class":182},[139,3178,186],{"class":159},[139,3180,3181],{"class":182},"refreshed",[139,3183,314],{"class":159},[139,3185,468],{"class":526},[139,3187,535],{"class":159},[139,3189,3190],{"class":538},"           # \"Kelvin\"\n",[139,3192,3193,3195,3197,3199,3201,3203,3205,3207,3209],{"class":141,"line":570},[139,3194,517],{"class":182},[139,3196,186],{"class":159},[139,3198,3181],{"class":182},[139,3200,314],{"class":159},[139,3202,527],{"class":526},[139,3204,314],{"class":159},[139,3206,1321],{"class":526},[139,3208,535],{"class":159},[139,3210,3211],{"class":538},"  # updated timestamp\n",[288,3213],{},[125,3215,3217],{"id":3216},"refresh",[120,3218,3216],{},[116,3220,3221],{},"Re-read the object's fields and row metadata from the database in place. Useful after another process may have updated the same row.",[130,3223,3225],{"className":132,"code":3224,"language":134,"meta":135,"style":135},"coll.refresh(obj)\n",[120,3226,3227],{"__ignoreMap":135},[139,3228,3229,3231,3233,3235,3237,3239],{"class":141,"line":142},[139,3230,311],{"class":149},[139,3232,314],{"class":159},[139,3234,3216],{"class":182},[139,3236,186],{"class":159},[139,3238,321],{"class":182},[139,3240,198],{"class":159},[116,3242,3243],{},[327,3244,329],{},[227,3246,3247,3257],{},[230,3248,3249],{},[233,3250,3251,3253,3255],{},[236,3252,238],{},[236,3254,241],{},[236,3256,244],{},[246,3258,3259],{},[233,3260,3261,3265,3269],{},[251,3262,3263],{},[120,3264,321],{},[251,3266,3267],{},[120,3268,357],{},[251,3270,3271],{},"A persisted model instance to update in place",[116,3273,3274],{},[327,3275,392],{},[394,3277,3278,3285],{},[397,3279,3280,3284],{},[400,3281,3282],{"href":3060},[120,3283,3063],{}," — if the object has never been written",[397,3286,3287,3291],{},[400,3288,3289],{"href":975},[120,3290,978],{}," — if the row no longer exists (e.g. deleted externally)",[130,3293,3295],{"className":132,"code":3294,"language":134,"meta":135,"style":135},"sensor = coll.read_object_by_id(1, Sensor)\n\n# ... some other process updates row 1 ...\n\ncoll.refresh(sensor)\nprint(sensor.unit)  # reflects the latest database state\n",[120,3296,3297,3319,3323,3328,3332,3346],{"__ignoreMap":135},[139,3298,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317],{"class":141,"line":142},[139,3300,457],{"class":149},[139,3302,179],{"class":159},[139,3304,866],{"class":149},[139,3306,314],{"class":159},[139,3308,846],{"class":182},[139,3310,186],{"class":159},[139,3312,1002],{"class":1001},[139,3314,160],{"class":159},[139,3316,462],{"class":182},[139,3318,198],{"class":159},[139,3320,3321],{"class":141,"line":166},[139,3322,170],{"emptyLinePlaceholder":169},[139,3324,3325],{"class":141,"line":173},[139,3326,3327],{"class":538},"# ... some other process updates row 1 ...\n",[139,3329,3330],{"class":141,"line":201},[139,3331,170],{"emptyLinePlaceholder":169},[139,3333,3334,3336,3338,3340,3342,3344],{"class":141,"line":542},[139,3335,311],{"class":149},[139,3337,314],{"class":159},[139,3339,3216],{"class":182},[139,3341,186],{"class":159},[139,3343,506],{"class":182},[139,3345,198],{"class":159},[139,3347,3348,3350,3352,3354,3356,3358,3360],{"class":141,"line":565},[139,3349,517],{"class":182},[139,3351,186],{"class":159},[139,3353,506],{"class":182},[139,3355,314],{"class":159},[139,3357,468],{"class":526},[139,3359,535],{"class":159},[139,3361,3362],{"class":538},"  # reflects the latest database state\n",[288,3364],{},[125,3366,3368],{"id":3367},"delete_object",[120,3369,3367],{},[116,3371,3372],{},"Delete a single object from the collection. Resets the object's persistence state so it can be re-written if needed.",[130,3374,3376],{"className":132,"code":3375,"language":134,"meta":135,"style":135},"coll.delete_object(obj)\n",[120,3377,3378],{"__ignoreMap":135},[139,3379,3380,3382,3384,3386,3388,3390],{"class":141,"line":142},[139,3381,311],{"class":149},[139,3383,314],{"class":159},[139,3385,3367],{"class":182},[139,3387,186],{"class":159},[139,3389,321],{"class":182},[139,3391,198],{"class":159},[116,3393,3394],{},[327,3395,329],{},[227,3397,3398,3408],{},[230,3399,3400],{},[233,3401,3402,3404,3406],{},[236,3403,238],{},[236,3405,241],{},[236,3407,244],{},[246,3409,3410],{},[233,3411,3412,3416,3420],{},[251,3413,3414],{},[120,3415,321],{},[251,3417,3418],{},[120,3419,357],{},[251,3421,3422],{},"A persisted model instance to delete",[116,3424,3425],{},[327,3426,392],{},[394,3428,3429,3437,3450,3465],{},[397,3430,3431,406,3435,3066],{},[400,3432,3433],{"href":3060},[120,3434,3063],{},[120,3436,292],{},[397,3438,3439,3445,3446,3449],{},[400,3440,3442],{"href":3441},"/api/exceptions#parenthaschildrenerror",[120,3443,3444],{},"ParentHasChildrenError"," — if the object is a parent with children linked via ",[120,3447,3448],{},"parent_ref(on_delete=\"restrict\")"," (the default)",[397,3451,3452,3454,3455,3458,3459,1479,3462],{},[120,3453,2768],{}," — if children are linked via the reserved ",[120,3456,3457],{},"on_delete"," modes ",[120,3460,3461],{},"\"cascade\"",[120,3463,3464],{},"\"set_null\"",[397,3466,3467,406,3469,436,3471,3087],{},[120,3468,433],{},[120,3470,321],{},[120,3472,357],{},[130,3474,3476],{"className":132,"code":3475,"language":134,"meta":135,"style":135},"sensor = coll.read_object_by_id(1, Sensor)\ncoll.delete_object(sensor)\n\n# Object is no longer persisted\nsensor.row  # raises AttributeError\n",[120,3477,3478,3500,3514,3518,3523],{"__ignoreMap":135},[139,3479,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498],{"class":141,"line":142},[139,3481,457],{"class":149},[139,3483,179],{"class":159},[139,3485,866],{"class":149},[139,3487,314],{"class":159},[139,3489,846],{"class":182},[139,3491,186],{"class":159},[139,3493,1002],{"class":1001},[139,3495,160],{"class":159},[139,3497,462],{"class":182},[139,3499,198],{"class":159},[139,3501,3502,3504,3506,3508,3510,3512],{"class":141,"line":166},[139,3503,311],{"class":149},[139,3505,314],{"class":159},[139,3507,3367],{"class":182},[139,3509,186],{"class":159},[139,3511,506],{"class":182},[139,3513,198],{"class":159},[139,3515,3516],{"class":141,"line":173},[139,3517,170],{"emptyLinePlaceholder":169},[139,3519,3520],{"class":141,"line":201},[139,3521,3522],{"class":538},"# Object is no longer persisted\n",[139,3524,3525,3527,3529,3531],{"class":141,"line":542},[139,3526,506],{"class":149},[139,3528,314],{"class":159},[139,3530,527],{"class":526},[139,3532,3533],{"class":538},"  # raises AttributeError\n",[288,3535],{},[125,3537,3539],{"id":3538},"delete_objects",[120,3540,3538],{},[116,3542,3543,3544,314],{},"Delete objects from the collection, optionally filtered by conditions. Accepts the same calling styles as ",[120,3545,1359],{},[130,3547,3549],{"className":132,"code":3548,"language":134,"meta":135,"style":135},"count = coll.delete_objects(Sensor)\ncount = coll.delete_objects(Sensor.fields.unit == \"Celsius\")\n",[120,3550,3551,3570],{"__ignoreMap":135},[139,3552,3553,3556,3558,3560,3562,3564,3566,3568],{"class":141,"line":142},[139,3554,3555],{"class":149},"count ",[139,3557,179],{"class":159},[139,3559,866],{"class":149},[139,3561,314],{"class":159},[139,3563,3538],{"class":182},[139,3565,186],{"class":159},[139,3567,1275],{"class":182},[139,3569,198],{"class":159},[139,3571,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602],{"class":141,"line":166},[139,3573,3555],{"class":149},[139,3575,179],{"class":159},[139,3577,866],{"class":149},[139,3579,314],{"class":159},[139,3581,3538],{"class":182},[139,3583,186],{"class":159},[139,3585,1275],{"class":182},[139,3587,314],{"class":159},[139,3589,1434],{"class":526},[139,3591,314],{"class":159},[139,3593,468],{"class":526},[139,3595,1441],{"class":159},[139,3597,218],{"class":159},[139,3599,475],{"class":192},[139,3601,189],{"class":159},[139,3603,198],{"class":159},[116,3605,3606],{},[327,3607,329],{},[227,3609,3610,3620],{},[230,3611,3612],{},[233,3613,3614,3616,3618],{},[236,3615,238],{},[236,3617,241],{},[236,3619,244],{},[246,3621,3622],{},[233,3623,3624,3628,3636],{},[251,3625,3626],{},[120,3627,1474],{},[251,3629,3630,1479,3632,1479,3634],{},[120,3631,929],{},[120,3633,1484],{},[120,3635,1487],{},[251,3637,2504,3638],{},[120,3639,1359],{},[116,3641,3642,972,3644,3646],{},[327,3643,959],{},[120,3645,912],{},", the number of rows deleted.",[116,3648,3649],{},[327,3650,392],{},[394,3652,3653,3658,3663,3672],{},[397,3654,3655,3657],{},[120,3656,433],{}," — if no arguments are given or arguments are of incompatible types",[397,3659,3660,3662],{},[120,3661,2263],{}," — if conditions reference different model classes or an unknown field name",[397,3664,3665,3669,3670,3449],{},[400,3666,3667],{"href":3441},[120,3668,3444],{}," — if any matched object is a parent with children linked via ",[120,3671,3448],{},[397,3673,3674,3454,3676,3458,3678,1479,3680],{},[120,3675,2768],{},[120,3677,3457],{},[120,3679,3461],{},[120,3681,3464],{},[130,3683,3685],{"className":132,"code":3684,"language":134,"meta":135,"style":135},"# Delete all sensors\ncount = coll.delete_objects(Sensor)\nprint(count)  # 5\n\n# Delete sensors matching a condition\ncount = coll.delete_objects(Sensor.fields.unit == \"Fahrenheit\")\nprint(count)  # 2\n\n# Delete with OR conditions\ncount = coll.delete_objects(\n    (Sensor.fields.unit == \"Celsius\") | (Sensor.fields.unit == \"Kelvin\"),\n)\n",[120,3686,3687,3692,3710,3723,3727,3732,3767,3780,3784,3789,3803,3851],{"__ignoreMap":135},[139,3688,3689],{"class":141,"line":142},[139,3690,3691],{"class":538},"# Delete all sensors\n",[139,3693,3694,3696,3698,3700,3702,3704,3706,3708],{"class":141,"line":166},[139,3695,3555],{"class":149},[139,3697,179],{"class":159},[139,3699,866],{"class":149},[139,3701,314],{"class":159},[139,3703,3538],{"class":182},[139,3705,186],{"class":159},[139,3707,1275],{"class":182},[139,3709,198],{"class":159},[139,3711,3712,3714,3716,3718,3720],{"class":141,"line":173},[139,3713,517],{"class":182},[139,3715,186],{"class":159},[139,3717,2734],{"class":182},[139,3719,535],{"class":159},[139,3721,3722],{"class":538},"  # 5\n",[139,3724,3725],{"class":141,"line":201},[139,3726,170],{"emptyLinePlaceholder":169},[139,3728,3729],{"class":141,"line":542},[139,3730,3731],{"class":538},"# Delete sensors matching a condition\n",[139,3733,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3763,3765],{"class":141,"line":565},[139,3735,3555],{"class":149},[139,3737,179],{"class":159},[139,3739,866],{"class":149},[139,3741,314],{"class":159},[139,3743,3538],{"class":182},[139,3745,186],{"class":159},[139,3747,1275],{"class":182},[139,3749,314],{"class":159},[139,3751,1434],{"class":526},[139,3753,314],{"class":159},[139,3755,468],{"class":526},[139,3757,1441],{"class":159},[139,3759,218],{"class":159},[139,3761,3762],{"class":192},"Fahrenheit",[139,3764,189],{"class":159},[139,3766,198],{"class":159},[139,3768,3769,3771,3773,3775,3777],{"class":141,"line":570},[139,3770,517],{"class":182},[139,3772,186],{"class":159},[139,3774,2734],{"class":182},[139,3776,535],{"class":159},[139,3778,3779],{"class":538},"  # 2\n",[139,3781,3782],{"class":141,"line":576},[139,3783,170],{"emptyLinePlaceholder":169},[139,3785,3786],{"class":141,"line":597},[139,3787,3788],{"class":538},"# Delete with OR conditions\n",[139,3790,3791,3793,3795,3797,3799,3801],{"class":141,"line":1681},[139,3792,3555],{"class":149},[139,3794,179],{"class":159},[139,3796,866],{"class":149},[139,3798,314],{"class":159},[139,3800,3538],{"class":182},[139,3802,1700],{"class":159},[139,3804,3805,3807,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841,3843,3845,3847,3849],{"class":141,"line":1687},[139,3806,1784],{"class":159},[139,3808,1275],{"class":182},[139,3810,314],{"class":159},[139,3812,1434],{"class":526},[139,3814,314],{"class":159},[139,3816,468],{"class":526},[139,3818,1441],{"class":159},[139,3820,218],{"class":159},[139,3822,475],{"class":192},[139,3824,189],{"class":159},[139,3826,535],{"class":159},[139,3828,1807],{"class":159},[139,3830,1810],{"class":159},[139,3832,1275],{"class":182},[139,3834,314],{"class":159},[139,3836,1434],{"class":526},[139,3838,314],{"class":159},[139,3840,468],{"class":526},[139,3842,1441],{"class":159},[139,3844,218],{"class":159},[139,3846,1827],{"class":192},[139,3848,189],{"class":159},[139,3850,1832],{"class":159},[139,3852,3853],{"class":141,"line":1703},[139,3854,198],{"class":159},[288,3856],{},[125,3858,3860],{"id":3859},"write_child",[120,3861,3859],{},[116,3863,3864,3865,3867,3868,3871,3872,314],{},"Link a child to its parent and write it in one step. Internally sets the matching ",[120,3866,424],{}," field to ",[120,3869,3870],{},"parent.row.id",", then calls ",[120,3873,3874],{},"write_object(child)",[130,3876,3878],{"className":132,"code":3877,"language":134,"meta":135,"style":135},"coll.write_child(child, parent=parent)\n",[120,3879,3880],{"__ignoreMap":135},[139,3881,3882,3884,3886,3888,3890,3893,3895,3898,3900,3903],{"class":141,"line":142},[139,3883,311],{"class":149},[139,3885,314],{"class":159},[139,3887,3859],{"class":182},[139,3889,186],{"class":159},[139,3891,3892],{"class":182},"child",[139,3894,160],{"class":159},[139,3896,3897],{"class":467}," parent",[139,3899,179],{"class":159},[139,3901,3902],{"class":182},"parent",[139,3904,198],{"class":159},[116,3906,3907],{},[327,3908,329],{},[227,3910,3911,3923],{},[230,3912,3913],{},[233,3914,3915,3917,3919,3921],{},[236,3916,238],{},[236,3918,241],{},[236,3920,342],{},[236,3922,244],{},[246,3924,3925,3940,3955],{},[233,3926,3927,3931,3935,3937],{},[251,3928,3929],{},[120,3930,3892],{},[251,3932,3933],{},[120,3934,357],{},[251,3936,360],{},[251,3938,3939],{},"The child object to link and persist",[233,3941,3942,3946,3950,3952],{},[251,3943,3944],{},[120,3945,3902],{},[251,3947,3948],{},[120,3949,357],{},[251,3951,360],{},[251,3953,3954],{},"The parent object. Must be persisted",[233,3956,3957,3961,3965,3969],{},[251,3958,3959],{},[120,3960,370],{},[251,3962,3963],{},[120,3964,375],{},[251,3966,3967],{},[120,3968,380],{},[251,3970,383,3971,3973],{},[120,3972,386],{},", force insert a new row even if the child was already written",[116,3975,3976],{},[327,3977,392],{},[394,3979,3980,3988,3995],{},[397,3981,3982,3984,3985,3987],{},[120,3983,433],{}," — if the child has no ",[120,3986,424],{}," pointing to the parent's model class",[397,3989,3990,3994],{},[400,3991,3992],{"href":3060},[120,3993,3063],{}," — if the parent has not been written",[397,3996,3997,4001,4002],{},[400,3998,3999],{"href":402},[120,4000,405],{}," — if the child was already written and ",[120,4003,412],{},[130,4005,4007],{"className":132,"code":4006,"language":134,"meta":135,"style":135},"portfolio = Portfolio(strategy=\"momentum\")\ncoll.write_object(portfolio)\n\ntrade = Trade(symbol=\"AAPL\", quantity=100)\ncoll.write_child(trade, parent=portfolio)\n\nprint(trade.portfolio)   # portfolio.row.id\nprint(trade.row.id)      # auto-assigned\n",[120,4008,4009,4035,4050,4054,4090,4113,4117,4134],{"__ignoreMap":135},[139,4010,4011,4014,4016,4019,4021,4024,4026,4028,4031,4033],{"class":141,"line":142},[139,4012,4013],{"class":149},"portfolio ",[139,4015,179],{"class":159},[139,4017,4018],{"class":182}," Portfolio",[139,4020,186],{"class":159},[139,4022,4023],{"class":467},"strategy",[139,4025,179],{"class":159},[139,4027,189],{"class":159},[139,4029,4030],{"class":192},"momentum",[139,4032,189],{"class":159},[139,4034,198],{"class":159},[139,4036,4037,4039,4041,4043,4045,4048],{"class":141,"line":166},[139,4038,311],{"class":149},[139,4040,314],{"class":159},[139,4042,292],{"class":182},[139,4044,186],{"class":159},[139,4046,4047],{"class":182},"portfolio",[139,4049,198],{"class":159},[139,4051,4052],{"class":141,"line":173},[139,4053,170],{"emptyLinePlaceholder":169},[139,4055,4056,4059,4061,4064,4066,4069,4071,4073,4076,4078,4080,4083,4085,4088],{"class":141,"line":201},[139,4057,4058],{"class":149},"trade ",[139,4060,179],{"class":159},[139,4062,4063],{"class":182}," Trade",[139,4065,186],{"class":159},[139,4067,4068],{"class":467},"symbol",[139,4070,179],{"class":159},[139,4072,189],{"class":159},[139,4074,4075],{"class":192},"AAPL",[139,4077,189],{"class":159},[139,4079,160],{"class":159},[139,4081,4082],{"class":467}," quantity",[139,4084,179],{"class":159},[139,4086,4087],{"class":1001},"100",[139,4089,198],{"class":159},[139,4091,4092,4094,4096,4098,4100,4103,4105,4107,4109,4111],{"class":141,"line":542},[139,4093,311],{"class":149},[139,4095,314],{"class":159},[139,4097,3859],{"class":182},[139,4099,186],{"class":159},[139,4101,4102],{"class":182},"trade",[139,4104,160],{"class":159},[139,4106,3897],{"class":467},[139,4108,179],{"class":159},[139,4110,4047],{"class":182},[139,4112,198],{"class":159},[139,4114,4115],{"class":141,"line":565},[139,4116,170],{"emptyLinePlaceholder":169},[139,4118,4119,4121,4123,4125,4127,4129,4131],{"class":141,"line":570},[139,4120,517],{"class":182},[139,4122,186],{"class":159},[139,4124,4102],{"class":182},[139,4126,314],{"class":159},[139,4128,4047],{"class":526},[139,4130,535],{"class":159},[139,4132,4133],{"class":538},"   # portfolio.row.id\n",[139,4135,4136,4138,4140,4142,4144,4146,4148,4150,4152],{"class":141,"line":576},[139,4137,517],{"class":182},[139,4139,186],{"class":159},[139,4141,4102],{"class":182},[139,4143,314],{"class":159},[139,4145,527],{"class":526},[139,4147,314],{"class":159},[139,4149,532],{"class":526},[139,4151,535],{"class":159},[139,4153,4154],{"class":538},"      # auto-assigned\n",[288,4156],{},[125,4158,4160],{"id":4159},"children_of",[120,4161,4159],{},[116,4163,4164,4165,4167],{},"Read all children linked to a parent object. Auto-discovers the foreign-key field by inspecting the child class for a ",[120,4166,424],{}," pointing to the parent's model class.",[130,4169,4171],{"className":132,"code":4170,"language":134,"meta":135,"style":135},"children = coll.children_of(parent, ChildClass)\n",[120,4172,4173],{"__ignoreMap":135},[139,4174,4175,4178,4180,4182,4184,4186,4188,4190,4192,4195],{"class":141,"line":142},[139,4176,4177],{"class":149},"children ",[139,4179,179],{"class":159},[139,4181,866],{"class":149},[139,4183,314],{"class":159},[139,4185,4159],{"class":182},[139,4187,186],{"class":159},[139,4189,3902],{"class":182},[139,4191,160],{"class":159},[139,4193,4194],{"class":182}," ChildClass",[139,4196,198],{"class":159},[116,4198,4199],{},[327,4200,329],{},[227,4202,4203,4215],{},[230,4204,4205],{},[233,4206,4207,4209,4211,4213],{},[236,4208,238],{},[236,4210,241],{},[236,4212,342],{},[236,4214,244],{},[246,4216,4217,4231,4247],{},[233,4218,4219,4223,4227,4229],{},[251,4220,4221],{},[120,4222,3902],{},[251,4224,4225],{},[120,4226,357],{},[251,4228,360],{},[251,4230,3954],{},[233,4232,4233,4238,4242,4244],{},[251,4234,4235],{},[120,4236,4237],{},"child_class",[251,4239,4240],{},[120,4241,929],{},[251,4243,360],{},[251,4245,4246],{},"The child model class to query",[233,4248,4249,4253,4257,4261],{},[251,4250,4251],{},[120,4252,941],{},[251,4254,4255],{},[120,4256,375],{},[251,4258,4259],{},[120,4260,380],{},[251,4262,383,4263,4265],{},[120,4264,386],{},", return raw database rows instead of model instances",[116,4267,4268,4270,4271,314],{},[327,4269,959],{}," — a list of child model instances, or raw rows if ",[120,4272,967],{},[116,4274,4275],{},[327,4276,392],{},[394,4278,4279,4286],{},[397,4280,4281,4283,4284,3987],{},[120,4282,433],{}," — if the child class has no ",[120,4285,424],{},[397,4287,4288,3994],{},[400,4289,4290],{"href":3060},[120,4291,3063],{},[130,4293,4295],{"className":132,"code":4294,"language":134,"meta":135,"style":135},"portfolio = Portfolio(strategy=\"momentum\")\ncoll.write_object(portfolio)\n\nt1 = Trade(symbol=\"AAPL\")\nt2 = Trade(symbol=\"GOOG\")\ncoll.write_child(t1, parent=portfolio)\ncoll.write_child(t2, parent=portfolio)\n\ntrades = coll.children_of(portfolio, Trade)\nprint(len(trades))  # 2\n\n# Raw rows\nrows = coll.children_of(portfolio, Trade, raw=True)\n",[120,4296,4297,4319,4333,4337,4360,4384,4407,4430,4434,4457,4475,4479,4484],{"__ignoreMap":135},[139,4298,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317],{"class":141,"line":142},[139,4300,4013],{"class":149},[139,4302,179],{"class":159},[139,4304,4018],{"class":182},[139,4306,186],{"class":159},[139,4308,4023],{"class":467},[139,4310,179],{"class":159},[139,4312,189],{"class":159},[139,4314,4030],{"class":192},[139,4316,189],{"class":159},[139,4318,198],{"class":159},[139,4320,4321,4323,4325,4327,4329,4331],{"class":141,"line":166},[139,4322,311],{"class":149},[139,4324,314],{"class":159},[139,4326,292],{"class":182},[139,4328,186],{"class":159},[139,4330,4047],{"class":182},[139,4332,198],{"class":159},[139,4334,4335],{"class":141,"line":173},[139,4336,170],{"emptyLinePlaceholder":169},[139,4338,4339,4342,4344,4346,4348,4350,4352,4354,4356,4358],{"class":141,"line":201},[139,4340,4341],{"class":149},"t1 ",[139,4343,179],{"class":159},[139,4345,4063],{"class":182},[139,4347,186],{"class":159},[139,4349,4068],{"class":467},[139,4351,179],{"class":159},[139,4353,189],{"class":159},[139,4355,4075],{"class":192},[139,4357,189],{"class":159},[139,4359,198],{"class":159},[139,4361,4362,4365,4367,4369,4371,4373,4375,4377,4380,4382],{"class":141,"line":542},[139,4363,4364],{"class":149},"t2 ",[139,4366,179],{"class":159},[139,4368,4063],{"class":182},[139,4370,186],{"class":159},[139,4372,4068],{"class":467},[139,4374,179],{"class":159},[139,4376,189],{"class":159},[139,4378,4379],{"class":192},"GOOG",[139,4381,189],{"class":159},[139,4383,198],{"class":159},[139,4385,4386,4388,4390,4392,4394,4397,4399,4401,4403,4405],{"class":141,"line":565},[139,4387,311],{"class":149},[139,4389,314],{"class":159},[139,4391,3859],{"class":182},[139,4393,186],{"class":159},[139,4395,4396],{"class":182},"t1",[139,4398,160],{"class":159},[139,4400,3897],{"class":467},[139,4402,179],{"class":159},[139,4404,4047],{"class":182},[139,4406,198],{"class":159},[139,4408,4409,4411,4413,4415,4417,4420,4422,4424,4426,4428],{"class":141,"line":570},[139,4410,311],{"class":149},[139,4412,314],{"class":159},[139,4414,3859],{"class":182},[139,4416,186],{"class":159},[139,4418,4419],{"class":182},"t2",[139,4421,160],{"class":159},[139,4423,3897],{"class":467},[139,4425,179],{"class":159},[139,4427,4047],{"class":182},[139,4429,198],{"class":159},[139,4431,4432],{"class":141,"line":576},[139,4433,170],{"emptyLinePlaceholder":169},[139,4435,4436,4439,4441,4443,4445,4447,4449,4451,4453,4455],{"class":141,"line":597},[139,4437,4438],{"class":149},"trades ",[139,4440,179],{"class":159},[139,4442,866],{"class":149},[139,4444,314],{"class":159},[139,4446,4159],{"class":182},[139,4448,186],{"class":159},[139,4450,4047],{"class":182},[139,4452,160],{"class":159},[139,4454,4063],{"class":182},[139,4456,198],{"class":159},[139,4458,4459,4461,4463,4466,4468,4471,4473],{"class":141,"line":1681},[139,4460,517],{"class":182},[139,4462,186],{"class":159},[139,4464,4465],{"class":182},"len",[139,4467,186],{"class":159},[139,4469,4470],{"class":182},"trades",[139,4472,838],{"class":159},[139,4474,3779],{"class":538},[139,4476,4477],{"class":141,"line":1687},[139,4478,170],{"emptyLinePlaceholder":169},[139,4480,4481],{"class":141,"line":1703},[139,4482,4483],{"class":538},"# Raw rows\n",[139,4485,4486,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509],{"class":141,"line":1728},[139,4487,4488],{"class":149},"rows ",[139,4490,179],{"class":159},[139,4492,866],{"class":149},[139,4494,314],{"class":159},[139,4496,4159],{"class":182},[139,4498,186],{"class":159},[139,4500,4047],{"class":182},[139,4502,160],{"class":159},[139,4504,4063],{"class":182},[139,4506,160],{"class":159},[139,4508,1102],{"class":467},[139,4510,594],{"class":159},[288,4512],{},[125,4514,4516],{"id":4515},"create_view",[120,4517,4515],{},[116,4519,4520,4521,4523],{},"Create a SQL VIEW that extracts model fields from the JSON ",[120,4522,1120],{}," column into queryable columns.",[130,4525,4527],{"className":132,"code":4526,"language":134,"meta":135,"style":135},"coll.create_view(name, *models)\n",[120,4528,4529],{"__ignoreMap":135},[139,4530,4531,4533,4535,4537,4539,4541,4543,4546,4549],{"class":141,"line":142},[139,4532,311],{"class":149},[139,4534,314],{"class":159},[139,4536,4515],{"class":182},[139,4538,186],{"class":159},[139,4540,268],{"class":182},[139,4542,160],{"class":159},[139,4544,4545],{"class":159}," *",[139,4547,4548],{"class":182},"models",[139,4550,198],{"class":159},[116,4552,4553],{},[327,4554,329],{},[227,4556,4557,4569],{},[230,4558,4559],{},[233,4560,4561,4563,4565,4567],{},[236,4562,238],{},[236,4564,241],{},[236,4566,342],{},[236,4568,244],{},[246,4570,4571,4589,4605,4624],{},[233,4572,4573,4577,4581,4583],{},[251,4574,4575],{},[120,4576,268],{},[251,4578,4579],{},[120,4580,273],{},[251,4582,360],{},[251,4584,4585,4586],{},"View name suffix. Final view name is ",[120,4587,4588],{},"{collection}_view_{name}",[233,4590,4591,4596,4600,4602],{},[251,4592,4593],{},[120,4594,4595],{},"*models",[251,4597,4598],{},[120,4599,929],{},[251,4601,360],{},[251,4603,4604],{},"One or more model classes whose fields define the view columns",[233,4606,4607,4612,4617,4621],{},[251,4608,4609],{},[120,4610,4611],{},"include_fields",[251,4613,4614],{},[120,4615,4616],{},"list[str]",[251,4618,4619],{},[120,4620,428],{},[251,4622,4623],{},"Restrict the view to only these field columns",[233,4625,4626,4631,4635,4639],{},[251,4627,4628],{},[120,4629,4630],{},"overwrite",[251,4632,4633],{},[120,4634,375],{},[251,4636,4637],{},[120,4638,380],{},[251,4640,4641],{},"Drop and recreate the view if it already exists",[116,4643,4644],{},[327,4645,392],{},[394,4647,4648,4660],{},[397,4649,4650,4656,4657],{},[400,4651,4653],{"href":4652},"/api/exceptions#viewalreadyexistserror",[120,4654,4655],{},"ViewAlreadyExistsError"," — if the view exists and ",[120,4658,4659],{},"overwrite=False",[397,4661,4662,406,4664,4666],{},[120,4663,2263],{},[120,4665,4611],{}," contains unknown field names",[130,4668,4670],{"className":132,"code":4669,"language":134,"meta":135,"style":135},"# Basic view — all fields\ncoll.create_view(\"dashboard\", Sensor)\n\n# Restrict to a subset of columns (faster on wide models)\ncoll.create_view(\"lite\", Sensor, include_fields=[\"unit\", \"location\"])\n\n# Multi-model union view\ncoll.create_view(\"all\", Sensor, Alert)\n\n# Replace an existing view\ncoll.create_view(\"dashboard\", SensorV2, overwrite=True)\n",[120,4671,4672,4677,4700,4704,4709,4756,4760,4765,4792,4796,4801],{"__ignoreMap":135},[139,4673,4674],{"class":141,"line":142},[139,4675,4676],{"class":538},"# Basic view — all fields\n",[139,4678,4679,4681,4683,4685,4687,4689,4692,4694,4696,4698],{"class":141,"line":166},[139,4680,311],{"class":149},[139,4682,314],{"class":159},[139,4684,4515],{"class":182},[139,4686,186],{"class":159},[139,4688,189],{"class":159},[139,4690,4691],{"class":192},"dashboard",[139,4693,189],{"class":159},[139,4695,160],{"class":159},[139,4697,462],{"class":182},[139,4699,198],{"class":159},[139,4701,4702],{"class":141,"line":173},[139,4703,170],{"emptyLinePlaceholder":169},[139,4705,4706],{"class":141,"line":201},[139,4707,4708],{"class":538},"# Restrict to a subset of columns (faster on wide models)\n",[139,4710,4711,4713,4715,4717,4719,4721,4724,4726,4728,4730,4732,4735,4738,4740,4742,4744,4746,4748,4751,4753],{"class":141,"line":542},[139,4712,311],{"class":149},[139,4714,314],{"class":159},[139,4716,4515],{"class":182},[139,4718,186],{"class":159},[139,4720,189],{"class":159},[139,4722,4723],{"class":192},"lite",[139,4725,189],{"class":159},[139,4727,160],{"class":159},[139,4729,462],{"class":182},[139,4731,160],{"class":159},[139,4733,4734],{"class":467}," include_fields",[139,4736,4737],{"class":159},"=[",[139,4739,189],{"class":159},[139,4741,468],{"class":192},[139,4743,189],{"class":159},[139,4745,160],{"class":159},[139,4747,218],{"class":159},[139,4749,4750],{"class":192},"location",[139,4752,189],{"class":159},[139,4754,4755],{"class":159},"])\n",[139,4757,4758],{"class":141,"line":565},[139,4759,170],{"emptyLinePlaceholder":169},[139,4761,4762],{"class":141,"line":570},[139,4763,4764],{"class":538},"# Multi-model union view\n",[139,4766,4767,4769,4771,4773,4775,4777,4779,4781,4783,4785,4787,4790],{"class":141,"line":576},[139,4768,311],{"class":149},[139,4770,314],{"class":159},[139,4772,4515],{"class":182},[139,4774,186],{"class":159},[139,4776,189],{"class":159},[139,4778,810],{"class":192},[139,4780,189],{"class":159},[139,4782,160],{"class":159},[139,4784,462],{"class":182},[139,4786,160],{"class":159},[139,4788,4789],{"class":182}," Alert",[139,4791,198],{"class":159},[139,4793,4794],{"class":141,"line":597},[139,4795,170],{"emptyLinePlaceholder":169},[139,4797,4798],{"class":141,"line":1681},[139,4799,4800],{"class":538},"# Replace an existing view\n",[139,4802,4803,4805,4807,4809,4811,4813,4815,4817,4819,4822,4824,4827],{"class":141,"line":1687},[139,4804,311],{"class":149},[139,4806,314],{"class":159},[139,4808,4515],{"class":182},[139,4810,186],{"class":159},[139,4812,189],{"class":159},[139,4814,4691],{"class":192},[139,4816,189],{"class":159},[139,4818,160],{"class":159},[139,4820,4821],{"class":182}," SensorV2",[139,4823,160],{"class":159},[139,4825,4826],{"class":467}," overwrite",[139,4828,594],{"class":159},[116,4830,4831,4832,4834],{},"After creation, query with plain SQL — ",[120,4833,2873],{}," returns a Polars DataFrame:",[130,4836,4838],{"className":132,"code":4837,"language":134,"meta":135,"style":135},"df = coll.sql_select(\"\"\"\n    SELECT location, threshold\n    FROM monitoring_view_dashboard\n    WHERE unit = 'Celsius' AND threshold > 50\n\"\"\")\n",[120,4839,4840,4857,4862,4867,4872],{"__ignoreMap":135},[139,4841,4842,4844,4846,4848,4850,4852,4854],{"class":141,"line":142},[139,4843,2883],{"class":149},[139,4845,179],{"class":159},[139,4847,866],{"class":149},[139,4849,314],{"class":159},[139,4851,2873],{"class":182},[139,4853,186],{"class":159},[139,4855,4856],{"class":159},"\"\"\"\n",[139,4858,4859],{"class":141,"line":166},[139,4860,4861],{"class":192},"    SELECT location, threshold\n",[139,4863,4864],{"class":141,"line":173},[139,4865,4866],{"class":192},"    FROM monitoring_view_dashboard\n",[139,4868,4869],{"class":141,"line":201},[139,4870,4871],{"class":192},"    WHERE unit = 'Celsius' AND threshold > 50\n",[139,4873,4874,4877],{"class":141,"line":542},[139,4875,4876],{"class":159},"\"\"\"",[139,4878,198],{"class":159},[288,4880],{},[125,4882,4884],{"id":4883},"refresh_view",[120,4885,4883],{},[116,4887,4888],{},"Drop and recreate an existing view.",[116,4890,4891,4892,4894,4895,4897,4898,4900,4901,4904],{},"When ",[120,4893,4611],{}," is omitted (",[120,4896,428],{},"), ",[120,4899,4883],{}," introspects the existing view and reuses its current column configuration. Renamed fields are translated automatically — a column created under the old name maps to the new name via ",[120,4902,4903],{},"renamed_from()"," without manual intervention.",[130,4906,4908],{"className":132,"code":4907,"language":134,"meta":135,"style":135},"coll.refresh_view(name, *models)\n",[120,4909,4910],{"__ignoreMap":135},[139,4911,4912,4914,4916,4918,4920,4922,4924,4926,4928],{"class":141,"line":142},[139,4913,311],{"class":149},[139,4915,314],{"class":159},[139,4917,4883],{"class":182},[139,4919,186],{"class":159},[139,4921,268],{"class":182},[139,4923,160],{"class":159},[139,4925,4545],{"class":159},[139,4927,4548],{"class":182},[139,4929,198],{"class":159},[116,4931,4932],{},[327,4933,329],{},[227,4935,4936,4948],{},[230,4937,4938],{},[233,4939,4940,4942,4944,4946],{},[236,4941,238],{},[236,4943,241],{},[236,4945,342],{},[236,4947,244],{},[246,4949,4950,4965,4980],{},[233,4951,4952,4956,4960,4962],{},[251,4953,4954],{},[120,4955,268],{},[251,4957,4958],{},[120,4959,273],{},[251,4961,360],{},[251,4963,4964],{},"View name suffix used when the view was created",[233,4966,4967,4971,4975,4977],{},[251,4968,4969],{},[120,4970,4595],{},[251,4972,4973],{},[120,4974,929],{},[251,4976,360],{},[251,4978,4979],{},"Updated model classes",[233,4981,4982,4986,4990,4994],{},[251,4983,4984],{},[120,4985,4611],{},[251,4987,4988],{},[120,4989,4616],{},[251,4991,4992],{},[120,4993,428],{},[251,4995,4996,4997,4999],{},"Field subset for the refreshed view. When ",[120,4998,428],{},", reuses the existing view's columns.",[130,5001,5003],{"className":132,"code":5002,"language":134,"meta":135,"style":135},"# Simplest form — reuses existing columns, translates renames\ncoll.refresh_view(\"dashboard\", SensorV2)\n\n# Explicitly change the column set\ncoll.refresh_view(\n    \"dashboard\",\n    SensorV2,\n    include_fields=[\"unit\", \"location\"],\n)\n",[120,5004,5005,5010,5032,5036,5041,5051,5061,5068,5092],{"__ignoreMap":135},[139,5006,5007],{"class":141,"line":142},[139,5008,5009],{"class":538},"# Simplest form — reuses existing columns, translates renames\n",[139,5011,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030],{"class":141,"line":166},[139,5013,311],{"class":149},[139,5015,314],{"class":159},[139,5017,4883],{"class":182},[139,5019,186],{"class":159},[139,5021,189],{"class":159},[139,5023,4691],{"class":192},[139,5025,189],{"class":159},[139,5027,160],{"class":159},[139,5029,4821],{"class":182},[139,5031,198],{"class":159},[139,5033,5034],{"class":141,"line":173},[139,5035,170],{"emptyLinePlaceholder":169},[139,5037,5038],{"class":141,"line":201},[139,5039,5040],{"class":538},"# Explicitly change the column set\n",[139,5042,5043,5045,5047,5049],{"class":141,"line":542},[139,5044,311],{"class":149},[139,5046,314],{"class":159},[139,5048,4883],{"class":182},[139,5050,1700],{"class":159},[139,5052,5053,5055,5057,5059],{"class":141,"line":565},[139,5054,2898],{"class":159},[139,5056,4691],{"class":192},[139,5058,189],{"class":159},[139,5060,1725],{"class":159},[139,5062,5063,5066],{"class":141,"line":570},[139,5064,5065],{"class":182},"    SensorV2",[139,5067,1725],{"class":159},[139,5069,5070,5073,5075,5077,5079,5081,5083,5085,5087,5089],{"class":141,"line":576},[139,5071,5072],{"class":467},"    include_fields",[139,5074,4737],{"class":159},[139,5076,189],{"class":159},[139,5078,468],{"class":192},[139,5080,189],{"class":159},[139,5082,160],{"class":159},[139,5084,218],{"class":159},[139,5086,4750],{"class":192},[139,5088,189],{"class":159},[139,5090,5091],{"class":159},"],\n",[139,5093,5094],{"class":141,"line":597},[139,5095,198],{"class":159},[288,5097],{},[125,5099,5101],{"id":5100},"describe_views",[120,5102,5100],{},[116,5104,5105],{},"List all views belonging to this collection and their columns.",[130,5107,5109],{"className":132,"code":5108,"language":134,"meta":135,"style":135},"coll.describe_views()\n",[120,5110,5111],{"__ignoreMap":135},[139,5112,5113,5115,5117,5119],{"class":141,"line":142},[139,5114,311],{"class":149},[139,5116,314],{"class":159},[139,5118,5100],{"class":182},[139,5120,5121],{"class":159},"()\n",[116,5123,5124,972,5126,5129,5130,2115,5132,2115,5134,2115,5136,5138],{},[327,5125,959],{},[120,5127,5128],{},"dict[str, list[str]]"," mapping full view names to lists of model-field column names (excluding fixed columns ",[120,5131,532],{},[120,5133,268],{},[120,5135,557],{},[120,5137,1321],{},").",[130,5140,5142],{"className":132,"code":5141,"language":134,"meta":135,"style":135},"coll.create_view(\"dashboard\", Sensor)\ncoll.create_view(\"lite\", Sensor, include_fields=[\"unit\", \"location\"])\n\nprint(coll.describe_views())\n# {\n#   'monitoring_view_dashboard': ['unit', 'location', 'threshold'],\n#   'monitoring_view_lite': ['unit', 'location'],\n# }\n",[120,5143,5144,5166,5208,5212,5227,5232,5237,5242],{"__ignoreMap":135},[139,5145,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164],{"class":141,"line":142},[139,5147,311],{"class":149},[139,5149,314],{"class":159},[139,5151,4515],{"class":182},[139,5153,186],{"class":159},[139,5155,189],{"class":159},[139,5157,4691],{"class":192},[139,5159,189],{"class":159},[139,5161,160],{"class":159},[139,5163,462],{"class":182},[139,5165,198],{"class":159},[139,5167,5168,5170,5172,5174,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206],{"class":141,"line":166},[139,5169,311],{"class":149},[139,5171,314],{"class":159},[139,5173,4515],{"class":182},[139,5175,186],{"class":159},[139,5177,189],{"class":159},[139,5179,4723],{"class":192},[139,5181,189],{"class":159},[139,5183,160],{"class":159},[139,5185,462],{"class":182},[139,5187,160],{"class":159},[139,5189,4734],{"class":467},[139,5191,4737],{"class":159},[139,5193,189],{"class":159},[139,5195,468],{"class":192},[139,5197,189],{"class":159},[139,5199,160],{"class":159},[139,5201,218],{"class":159},[139,5203,4750],{"class":192},[139,5205,189],{"class":159},[139,5207,4755],{"class":159},[139,5209,5210],{"class":141,"line":173},[139,5211,170],{"emptyLinePlaceholder":169},[139,5213,5214,5216,5218,5220,5222,5224],{"class":141,"line":201},[139,5215,517],{"class":182},[139,5217,186],{"class":159},[139,5219,311],{"class":182},[139,5221,314],{"class":159},[139,5223,5100],{"class":182},[139,5225,5226],{"class":159},"())\n",[139,5228,5229],{"class":141,"line":542},[139,5230,5231],{"class":538},"# {\n",[139,5233,5234],{"class":141,"line":565},[139,5235,5236],{"class":538},"#   'monitoring_view_dashboard': ['unit', 'location', 'threshold'],\n",[139,5238,5239],{"class":141,"line":570},[139,5240,5241],{"class":538},"#   'monitoring_view_lite': ['unit', 'location'],\n",[139,5243,5244],{"class":141,"line":576},[139,5245,5246],{"class":538},"# }\n",[288,5248],{},[125,5250,5252],{"id":5251},"create_index",[120,5253,5251],{},[116,5255,5256],{},"Create an index on a field. Idempotent — safe to call on every application startup.",[116,5258,5259],{},"Automatically selects the correct index type:",[394,5261,5262,5276],{},[397,5263,5264,5267,5268,2115,5270,2115,5272,2115,5274],{},[327,5265,5266],{},"Plain column index"," for built-in fields: ",[120,5269,532],{},[120,5271,268],{},[120,5273,557],{},[120,5275,1321],{},[397,5277,5278,5281,5282,5284],{},[327,5279,5280],{},"JSON expression index"," for any other name (field stored in the ",[120,5283,1120],{}," blob)",[130,5286,5288],{"className":132,"code":5287,"language":134,"meta":135,"style":135},"coll.create_index(field)\n",[120,5289,5290],{"__ignoreMap":135},[139,5291,5292,5294,5296,5298,5300,5303],{"class":141,"line":142},[139,5293,311],{"class":149},[139,5295,314],{"class":159},[139,5297,5251],{"class":182},[139,5299,186],{"class":159},[139,5301,5302],{"class":182},"field",[139,5304,198],{"class":159},[116,5306,5307],{},[327,5308,329],{},[227,5310,5311,5321],{},[230,5312,5313],{},[233,5314,5315,5317,5319],{},[236,5316,238],{},[236,5318,241],{},[236,5320,244],{},[246,5322,5323],{},[233,5324,5325,5329,5333],{},[251,5326,5327],{},[120,5328,5302],{},[251,5330,5331],{},[120,5332,273],{},[251,5334,5335],{},"Field name to index",[130,5337,5339],{"className":132,"code":5338,"language":134,"meta":135,"style":135},"coll.create_index(\"unit\")        # CREATE INDEX ... ON monitoring_objects (json_extract(meta, '$.unit'))\ncoll.create_index(\"write_time\")  # CREATE INDEX ... ON monitoring_objects (write_time)\ncoll.create_index(\"unit\")        # no-op — index already exists\n",[120,5340,5341,5362,5383],{"__ignoreMap":135},[139,5342,5343,5345,5347,5349,5351,5353,5355,5357,5359],{"class":141,"line":142},[139,5344,311],{"class":149},[139,5346,314],{"class":159},[139,5348,5251],{"class":182},[139,5350,186],{"class":159},[139,5352,189],{"class":159},[139,5354,468],{"class":192},[139,5356,189],{"class":159},[139,5358,535],{"class":159},[139,5360,5361],{"class":538},"        # CREATE INDEX ... ON monitoring_objects (json_extract(meta, '$.unit'))\n",[139,5363,5364,5366,5368,5370,5372,5374,5376,5378,5380],{"class":141,"line":166},[139,5365,311],{"class":149},[139,5367,314],{"class":159},[139,5369,5251],{"class":182},[139,5371,186],{"class":159},[139,5373,189],{"class":159},[139,5375,557],{"class":192},[139,5377,189],{"class":159},[139,5379,535],{"class":159},[139,5381,5382],{"class":538},"  # CREATE INDEX ... ON monitoring_objects (write_time)\n",[139,5384,5385,5387,5389,5391,5393,5395,5397,5399,5401],{"class":141,"line":173},[139,5386,311],{"class":149},[139,5388,314],{"class":159},[139,5390,5251],{"class":182},[139,5392,186],{"class":159},[139,5394,189],{"class":159},[139,5396,468],{"class":192},[139,5398,189],{"class":159},[139,5400,535],{"class":159},[139,5402,5403],{"class":538},"        # no-op — index already exists\n",[116,5405,5406,5407,5410,5411,314],{},"Indexes live on the ",[327,5408,5409],{},"objects table",", not on views — they are fully independent. See ",[400,5412,5414],{"href":5413},"/essentials/views#indexing-fields-for-performance","Indexing fields for performance",[288,5416],{},[125,5418,5420],{"id":5419},"drop_index",[120,5421,5419],{},[116,5423,5424],{},"Drop an index by field name. Silent if the index does not exist.",[130,5426,5428],{"className":132,"code":5427,"language":134,"meta":135,"style":135},"coll.drop_index(field)\n",[120,5429,5430],{"__ignoreMap":135},[139,5431,5432,5434,5436,5438,5440,5442],{"class":141,"line":142},[139,5433,311],{"class":149},[139,5435,314],{"class":159},[139,5437,5419],{"class":182},[139,5439,186],{"class":159},[139,5441,5302],{"class":182},[139,5443,198],{"class":159},[116,5445,5446],{},[327,5447,329],{},[227,5449,5450,5460],{},[230,5451,5452],{},[233,5453,5454,5456,5458],{},[236,5455,238],{},[236,5457,241],{},[236,5459,244],{},[246,5461,5462],{},[233,5463,5464,5468,5472],{},[251,5465,5466],{},[120,5467,5302],{},[251,5469,5470],{},[120,5471,273],{},[251,5473,5474],{},"The field name used when the index was created",[116,5476,5477,972,5479,5481,5482,5484,5485,5487],{},[327,5478,392],{},[120,5480,2263],{}," if ",[120,5483,5302],{}," refers to the auto-managed ",[120,5486,268],{}," index, which CentauroDB requires for correct operation.",[130,5489,5491],{"className":132,"code":5490,"language":134,"meta":135,"style":135},"coll.drop_index(\"unit\")          # drops idx_monitoring_unit\ncoll.drop_index(\"old_field\")     # no-op if the index doesn't exist\ncoll.drop_index(\"name\")          # raises ValueError — managed index\n",[120,5492,5493,5514,5536],{"__ignoreMap":135},[139,5494,5495,5497,5499,5501,5503,5505,5507,5509,5511],{"class":141,"line":142},[139,5496,311],{"class":149},[139,5498,314],{"class":159},[139,5500,5419],{"class":182},[139,5502,186],{"class":159},[139,5504,189],{"class":159},[139,5506,468],{"class":192},[139,5508,189],{"class":159},[139,5510,535],{"class":159},[139,5512,5513],{"class":538},"          # drops idx_monitoring_unit\n",[139,5515,5516,5518,5520,5522,5524,5526,5529,5531,5533],{"class":141,"line":166},[139,5517,311],{"class":149},[139,5519,314],{"class":159},[139,5521,5419],{"class":182},[139,5523,186],{"class":159},[139,5525,189],{"class":159},[139,5527,5528],{"class":192},"old_field",[139,5530,189],{"class":159},[139,5532,535],{"class":159},[139,5534,5535],{"class":538},"     # no-op if the index doesn't exist\n",[139,5537,5538,5540,5542,5544,5546,5548,5550,5552,5554],{"class":141,"line":173},[139,5539,311],{"class":149},[139,5541,314],{"class":159},[139,5543,5419],{"class":182},[139,5545,186],{"class":159},[139,5547,189],{"class":159},[139,5549,268],{"class":192},[139,5551,189],{"class":159},[139,5553,535],{"class":159},[139,5555,5556],{"class":538},"          # raises ValueError — managed index\n",[288,5558],{},[125,5560,5562],{"id":5561},"list_indexes",[120,5563,5561],{},[116,5565,5566,5567,5569],{},"List all user-managed indexes on this collection's objects table. The internal ",[120,5568,268],{}," index is always excluded.",[130,5571,5573],{"className":132,"code":5572,"language":134,"meta":135,"style":135},"coll.list_indexes()\n",[120,5574,5575],{"__ignoreMap":135},[139,5576,5577,5579,5581,5583],{"class":141,"line":142},[139,5578,311],{"class":149},[139,5580,314],{"class":159},[139,5582,5561],{"class":182},[139,5584,5121],{"class":159},[116,5586,5587],{},[327,5588,329],{},[227,5590,5591,5603],{},[230,5592,5593],{},[233,5594,5595,5597,5599,5601],{},[236,5596,238],{},[236,5598,241],{},[236,5600,342],{},[236,5602,244],{},[246,5604,5605],{},[233,5606,5607,5611,5615,5619],{},[251,5608,5609],{},[120,5610,941],{},[251,5612,5613],{},[120,5614,375],{},[251,5616,5617],{},[120,5618,380],{},[251,5620,5621],{},"Return full index names instead of field-name suffixes",[116,5623,5624,972,5626,5628],{},[327,5625,959],{},[120,5627,4616],{}," sorted alphabetically.",[130,5630,5632],{"className":132,"code":5631,"language":134,"meta":135,"style":135},"coll.create_index(\"unit\")\ncoll.create_index(\"write_time\")\n\ncoll.list_indexes()\n# ['unit', 'write_time']\n\ncoll.list_indexes(raw=True)\n# ['idx_monitoring_unit', 'idx_monitoring_write_time']\n",[120,5633,5634,5652,5670,5674,5684,5689,5693,5707],{"__ignoreMap":135},[139,5635,5636,5638,5640,5642,5644,5646,5648,5650],{"class":141,"line":142},[139,5637,311],{"class":149},[139,5639,314],{"class":159},[139,5641,5251],{"class":182},[139,5643,186],{"class":159},[139,5645,189],{"class":159},[139,5647,468],{"class":192},[139,5649,189],{"class":159},[139,5651,198],{"class":159},[139,5653,5654,5656,5658,5660,5662,5664,5666,5668],{"class":141,"line":166},[139,5655,311],{"class":149},[139,5657,314],{"class":159},[139,5659,5251],{"class":182},[139,5661,186],{"class":159},[139,5663,189],{"class":159},[139,5665,557],{"class":192},[139,5667,189],{"class":159},[139,5669,198],{"class":159},[139,5671,5672],{"class":141,"line":173},[139,5673,170],{"emptyLinePlaceholder":169},[139,5675,5676,5678,5680,5682],{"class":141,"line":201},[139,5677,311],{"class":149},[139,5679,314],{"class":159},[139,5681,5561],{"class":182},[139,5683,5121],{"class":159},[139,5685,5686],{"class":141,"line":542},[139,5687,5688],{"class":538},"# ['unit', 'write_time']\n",[139,5690,5691],{"class":141,"line":565},[139,5692,170],{"emptyLinePlaceholder":169},[139,5694,5695,5697,5699,5701,5703,5705],{"class":141,"line":570},[139,5696,311],{"class":149},[139,5698,314],{"class":159},[139,5700,5561],{"class":182},[139,5702,186],{"class":159},[139,5704,941],{"class":467},[139,5706,594],{"class":159},[139,5708,5709],{"class":141,"line":576},[139,5710,5711],{"class":538},"# ['idx_monitoring_unit', 'idx_monitoring_write_time']\n",[116,5713,5714],{},"All user-created indexes share the same naming convention and appear here.",[288,5716],{},[125,5718,5719],{"id":2873},[120,5720,2873],{},[116,5722,5723,5724,5727,5728,5731,5732,5738],{},"Execute a read-only ",[120,5725,5726],{},"SELECT"," (or ",[120,5729,5730],{},"WITH … SELECT",") query and return the result as a Polars DataFrame. A convenience wrapper around ",[400,5733,5735],{"href":5734},"/api/engine#sql_select",[120,5736,5737],{},"engine.sql_select"," — no need to reference the engine directly.",[130,5740,5742],{"className":132,"code":5741,"language":134,"meta":135,"style":135},"df = coll.sql_select(sql, params)\n",[120,5743,5744],{"__ignoreMap":135},[139,5745,5746,5748,5750,5752,5754,5756,5758,5761,5763,5766],{"class":141,"line":142},[139,5747,2883],{"class":149},[139,5749,179],{"class":159},[139,5751,866],{"class":149},[139,5753,314],{"class":159},[139,5755,2873],{"class":182},[139,5757,186],{"class":159},[139,5759,5760],{"class":182},"sql",[139,5762,160],{"class":159},[139,5764,5765],{"class":182}," params",[139,5767,198],{"class":159},[116,5769,5770],{},[327,5771,329],{},[227,5773,5774,5786],{},[230,5775,5776],{},[233,5777,5778,5780,5782,5784],{},[236,5779,238],{},[236,5781,241],{},[236,5783,342],{},[236,5785,244],{},[246,5787,5788,5808],{},[233,5789,5790,5794,5798,5800],{},[251,5791,5792],{},[120,5793,5760],{},[251,5795,5796],{},[120,5797,273],{},[251,5799,360],{},[251,5801,5802,5803,1479,5805,5807],{},"A ",[120,5804,5726],{},[120,5806,5730],{}," query",[233,5809,5810,5815,5820,5825],{},[251,5811,5812],{},[120,5813,5814],{},"params",[251,5816,5817],{},[120,5818,5819],{},"tuple",[251,5821,5822],{},[120,5823,5824],{},"()",[251,5826,5827],{},"Bind parameters for the query",[116,5829,5830,972,5832],{},[327,5831,959],{},[120,5833,5834],{},"polars.DataFrame",[116,5836,5837,972,5839,5841,5842,5845],{},[327,5838,392],{},[120,5840,2263],{}," if the statement is not a SELECT/WITH query. ",[120,5843,5844],{},"ImportError"," if polars is not installed.",[130,5847,5849],{"className":132,"code":5848,"language":134,"meta":135,"style":135},"coll.create_view(\"dashboard\", Sensor)\n\ndf = coll.sql_select(\"\"\"\n    SELECT location, AVG(threshold) AS avg_threshold\n    FROM monitoring_view_dashboard\n    WHERE unit = 'Celsius'\n    GROUP BY location\n\"\"\")\nprint(df)\n# ┌──────────┬───────────────┐\n# │ location ┆ avg_threshold │\n# │ ---      ┆ ---           │\n# │ str      ┆ f64           │\n# ╞══════════╪═══════════════╡\n# │ pelion   ┆ 80.0          │\n# └──────────┴───────────────┘\n",[120,5850,5851,5873,5877,5893,5898,5902,5907,5912,5918,5929,5934,5939,5944,5949,5954,5959],{"__ignoreMap":135},[139,5852,5853,5855,5857,5859,5861,5863,5865,5867,5869,5871],{"class":141,"line":142},[139,5854,311],{"class":149},[139,5856,314],{"class":159},[139,5858,4515],{"class":182},[139,5860,186],{"class":159},[139,5862,189],{"class":159},[139,5864,4691],{"class":192},[139,5866,189],{"class":159},[139,5868,160],{"class":159},[139,5870,462],{"class":182},[139,5872,198],{"class":159},[139,5874,5875],{"class":141,"line":166},[139,5876,170],{"emptyLinePlaceholder":169},[139,5878,5879,5881,5883,5885,5887,5889,5891],{"class":141,"line":173},[139,5880,2883],{"class":149},[139,5882,179],{"class":159},[139,5884,866],{"class":149},[139,5886,314],{"class":159},[139,5888,2873],{"class":182},[139,5890,186],{"class":159},[139,5892,4856],{"class":159},[139,5894,5895],{"class":141,"line":201},[139,5896,5897],{"class":192},"    SELECT location, AVG(threshold) AS avg_threshold\n",[139,5899,5900],{"class":141,"line":542},[139,5901,4866],{"class":192},[139,5903,5904],{"class":141,"line":565},[139,5905,5906],{"class":192},"    WHERE unit = 'Celsius'\n",[139,5908,5909],{"class":141,"line":570},[139,5910,5911],{"class":192},"    GROUP BY location\n",[139,5913,5914,5916],{"class":141,"line":576},[139,5915,4876],{"class":159},[139,5917,198],{"class":159},[139,5919,5920,5922,5924,5927],{"class":141,"line":597},[139,5921,517],{"class":182},[139,5923,186],{"class":159},[139,5925,5926],{"class":182},"df",[139,5928,198],{"class":159},[139,5930,5931],{"class":141,"line":1681},[139,5932,5933],{"class":538},"# ┌──────────┬───────────────┐\n",[139,5935,5936],{"class":141,"line":1687},[139,5937,5938],{"class":538},"# │ location ┆ avg_threshold │\n",[139,5940,5941],{"class":141,"line":1703},[139,5942,5943],{"class":538},"# │ ---      ┆ ---           │\n",[139,5945,5946],{"class":141,"line":1728},[139,5947,5948],{"class":538},"# │ str      ┆ f64           │\n",[139,5950,5951],{"class":141,"line":1750},[139,5952,5953],{"class":538},"# ╞══════════╪═══════════════╡\n",[139,5955,5956],{"class":141,"line":1755},[139,5957,5958],{"class":538},"# │ pelion   ┆ 80.0          │\n",[139,5960,5961],{"class":141,"line":1760},[139,5962,5963],{"class":538},"# └──────────┴───────────────┘\n",[2375,5965,5966,5967,5970,5971,5974,5975,5979,5980,5986],{"icon":14},"Requires the ",[120,5968,5969],{},"polars"," extra: ",[120,5972,5973],{},"pip install centaurodb[polars]",". See also ",[400,5976,5977],{"href":5734},[120,5978,5737],{}," and ",[400,5981,5983],{"href":5982},"/api/engine#sql_execute",[120,5984,5985],{},"engine.sql_execute"," for lower-level access and mutation queries.",[288,5988],{},[112,5990,446],{"id":5991},"timeseriescollection",[116,5993,5994,5995,5997,5998,6000,6001,6004,6005,6008,6009,6011,6012,5979,6014,6016],{},"A dedicated collection type for ",[120,5996,442],{}," models. Creates both a ",[120,5999,122],{}," table and a ",[120,6002,6003],{},"{name}_values"," table for storing ",[120,6006,6007],{},"(time, value)"," pairs per object. Shares most methods with ",[120,6010,95],{}," (write, read, query, update, refresh, delete, views, indexes, relations) with the following additions and overrides — ",[120,6013,2139],{},[120,6015,2651],{}," are inherited unchanged and fully available.",[125,6018,128],{"id":6019},"constructor-1",[130,6021,6023],{"className":132,"code":6022,"language":134,"meta":135,"style":135},"from centaurodb import TimeSeriesCollection\n\ncoll = TimeSeriesCollection(engine, \"stations\")\n",[120,6024,6025,6036,6040],{"__ignoreMap":135},[139,6026,6027,6029,6031,6033],{"class":141,"line":142},[139,6028,146],{"class":145},[139,6030,150],{"class":149},[139,6032,153],{"class":145},[139,6034,6035],{"class":149}," TimeSeriesCollection\n",[139,6037,6038],{"class":141,"line":166},[139,6039,170],{"emptyLinePlaceholder":169},[139,6041,6042,6044,6046,6049,6051,6053,6055,6057,6060,6062],{"class":141,"line":173},[139,6043,204],{"class":149},[139,6045,179],{"class":159},[139,6047,6048],{"class":182}," TimeSeriesCollection",[139,6050,186],{"class":159},[139,6052,213],{"class":182},[139,6054,160],{"class":159},[139,6056,218],{"class":159},[139,6058,6059],{"class":192},"stations",[139,6061,189],{"class":159},[139,6063,198],{"class":159},[116,6065,6066,6067,5979,6070,6073],{},"Creates both ",[120,6068,6069],{},"stations_objects",[120,6071,6072],{},"stations_values"," tables.",[288,6075],{},[125,6077,6079,6081],{"id":6078},"write_object-override",[120,6080,292],{}," (override)",[116,6083,6084,6085,6088],{},"Inserts the object row and all ",[120,6086,6087],{},"obj.values"," in a single operation.",[130,6090,6091],{"className":132,"code":304,"language":134,"meta":135,"style":135},[120,6092,6093],{"__ignoreMap":135},[139,6094,6095,6097,6099,6101,6103,6105],{"class":141,"line":142},[139,6096,311],{"class":149},[139,6098,314],{"class":159},[139,6100,292],{"class":182},[139,6102,186],{"class":159},[139,6104,321],{"class":182},[139,6106,198],{"class":159},[116,6108,6109,972,6111,5481,6113,436,6115,6117],{},[327,6110,392],{},[120,6112,433],{},[120,6114,321],{},[120,6116,442],{}," instance.",[130,6119,6121],{"className":132,"code":6120,"language":134,"meta":135,"style":135},"station = WeatherStation(\n    city=\"Sparta\",\n    values=[\n        CentauroValues(time=\"2025-06-01T08:00:00\", value=22.5),\n        CentauroValues(time=\"2025-06-01T09:00:00\", value=24.1),\n    ],\n)\ncoll.write_object(station)\nprint(station.row.id)   # 1\n",[120,6122,6123,6135,6151,6159,6190,6218,6223,6227,6242],{"__ignoreMap":135},[139,6124,6125,6128,6130,6133],{"class":141,"line":142},[139,6126,6127],{"class":149},"station ",[139,6129,179],{"class":159},[139,6131,6132],{"class":182}," WeatherStation",[139,6134,1700],{"class":159},[139,6136,6137,6140,6142,6144,6147,6149],{"class":141,"line":166},[139,6138,6139],{"class":467},"    city",[139,6141,179],{"class":159},[139,6143,189],{"class":159},[139,6145,6146],{"class":192},"Sparta",[139,6148,189],{"class":159},[139,6150,1725],{"class":159},[139,6152,6153,6156],{"class":141,"line":173},[139,6154,6155],{"class":467},"    values",[139,6157,6158],{"class":159},"=[\n",[139,6160,6161,6164,6166,6169,6171,6173,6176,6178,6180,6183,6185,6188],{"class":141,"line":201},[139,6162,6163],{"class":182},"        CentauroValues",[139,6165,186],{"class":159},[139,6167,6168],{"class":467},"time",[139,6170,179],{"class":159},[139,6172,189],{"class":159},[139,6174,6175],{"class":192},"2025-06-01T08:00:00",[139,6177,189],{"class":159},[139,6179,160],{"class":159},[139,6181,6182],{"class":467}," value",[139,6184,179],{"class":159},[139,6186,6187],{"class":1001},"22.5",[139,6189,1832],{"class":159},[139,6191,6192,6194,6196,6198,6200,6202,6205,6207,6209,6211,6213,6216],{"class":141,"line":542},[139,6193,6163],{"class":182},[139,6195,186],{"class":159},[139,6197,6168],{"class":467},[139,6199,179],{"class":159},[139,6201,189],{"class":159},[139,6203,6204],{"class":192},"2025-06-01T09:00:00",[139,6206,189],{"class":159},[139,6208,160],{"class":159},[139,6210,6182],{"class":467},[139,6212,179],{"class":159},[139,6214,6215],{"class":1001},"24.1",[139,6217,1832],{"class":159},[139,6219,6220],{"class":141,"line":565},[139,6221,6222],{"class":159},"    ],\n",[139,6224,6225],{"class":141,"line":570},[139,6226,198],{"class":159},[139,6228,6229,6231,6233,6235,6237,6240],{"class":141,"line":576},[139,6230,311],{"class":149},[139,6232,314],{"class":159},[139,6234,292],{"class":182},[139,6236,186],{"class":159},[139,6238,6239],{"class":182},"station",[139,6241,198],{"class":159},[139,6243,6244,6246,6248,6250,6252,6254,6256,6258,6260],{"class":141,"line":597},[139,6245,517],{"class":182},[139,6247,186],{"class":159},[139,6249,6239],{"class":182},[139,6251,314],{"class":159},[139,6253,527],{"class":526},[139,6255,314],{"class":159},[139,6257,532],{"class":526},[139,6259,535],{"class":159},[139,6261,6262],{"class":538},"   # 1\n",[288,6264],{},[125,6266,6268,6081],{"id":6267},"write_objects-override",[120,6269,621],{},[116,6271,6272,6273,6275],{},"Insert multiple time-series objects in a single atomic transaction. All objects must be ",[120,6274,442],{}," instances.",[130,6277,6278],{"className":132,"code":633,"language":134,"meta":135,"style":135},[120,6279,6280],{"__ignoreMap":135},[139,6281,6282,6284,6286,6288,6290,6292],{"class":141,"line":142},[139,6283,311],{"class":149},[139,6285,314],{"class":159},[139,6287,621],{"class":182},[139,6289,186],{"class":159},[139,6291,648],{"class":182},[139,6293,198],{"class":159},[116,6295,6296,972,6298,6300,6301,314],{},[327,6297,392],{},[120,6299,433],{}," if any element is not a ",[120,6302,442],{},[130,6304,6306],{"className":132,"code":6305,"language":134,"meta":135,"style":135},"metrics = [Metric(unit=\"kg\"), Metric(unit=\"m\")]\ncoll.write_objects(metrics)\n",[120,6307,6308,6353],{"__ignoreMap":135},[139,6309,6310,6313,6315,6317,6320,6322,6324,6326,6328,6331,6333,6335,6338,6340,6342,6344,6346,6349,6351],{"class":141,"line":142},[139,6311,6312],{"class":149},"metrics ",[139,6314,179],{"class":159},[139,6316,747],{"class":159},[139,6318,6319],{"class":182},"Metric",[139,6321,186],{"class":159},[139,6323,468],{"class":467},[139,6325,179],{"class":159},[139,6327,189],{"class":159},[139,6329,6330],{"class":192},"kg",[139,6332,189],{"class":159},[139,6334,767],{"class":159},[139,6336,6337],{"class":182}," Metric",[139,6339,186],{"class":159},[139,6341,468],{"class":467},[139,6343,179],{"class":159},[139,6345,189],{"class":159},[139,6347,6348],{"class":192},"m",[139,6350,189],{"class":159},[139,6352,786],{"class":159},[139,6354,6355,6357,6359,6361,6363,6366],{"class":141,"line":166},[139,6356,311],{"class":149},[139,6358,314],{"class":159},[139,6360,621],{"class":182},[139,6362,186],{"class":159},[139,6364,6365],{"class":182},"metrics",[139,6367,198],{"class":159},[288,6369],{},[125,6371,6373,6081],{"id":6372},"read_object_by_id-override",[120,6374,846],{},[116,6376,6377,6378,6381],{},"Read an object and, by default, hydrate its ",[120,6379,6380],{},"values"," list from the values table.",[130,6383,6384],{"className":132,"code":854,"language":134,"meta":135,"style":135},[120,6385,6386],{"__ignoreMap":135},[139,6387,6388,6390,6392,6394,6396,6398,6400,6402,6404,6406],{"class":141,"line":142},[139,6389,861],{"class":149},[139,6391,179],{"class":159},[139,6393,866],{"class":149},[139,6395,314],{"class":159},[139,6397,846],{"class":182},[139,6399,186],{"class":159},[139,6401,532],{"class":182},[139,6403,160],{"class":159},[139,6405,879],{"class":182},[139,6407,198],{"class":159},[116,6409,6410],{},[327,6411,6412],{},"Extra parameter",[227,6414,6415,6427],{},[230,6416,6417],{},[233,6418,6419,6421,6423,6425],{},[236,6420,238],{},[236,6422,241],{},[236,6424,342],{},[236,6426,244],{},[246,6428,6429],{},[233,6430,6431,6436,6440,6444],{},[251,6432,6433],{},[120,6434,6435],{},"hydrate_values",[251,6437,6438],{},[120,6439,375],{},[251,6441,6442],{},[120,6443,386],{},[251,6445,383,6446,6448,6449,6451],{},[120,6447,380],{},", skip loading values — ",[120,6450,6087],{}," will be empty",[130,6453,6455],{"className":132,"code":6454,"language":134,"meta":135,"style":135},"# Full read — object + all time-series values\nstation = coll.read_object_by_id(1, WeatherStation)\nprint(len(station.values))   # 2\n\n# Metadata only — skip the values query\nstation = coll.read_object_by_id(1, WeatherStation, hydrate_values=False)\nprint(station.city)          # \"Sparta\"\nprint(station.values)        # []\nstation.df                   # raises ValuesNotHydratedError — see [Exceptions](/api/exceptions#valuesnothydratederror)\n",[120,6456,6457,6462,6484,6505,6509,6514,6542,6560,6577],{"__ignoreMap":135},[139,6458,6459],{"class":141,"line":142},[139,6460,6461],{"class":538},"# Full read — object + all time-series values\n",[139,6463,6464,6466,6468,6470,6472,6474,6476,6478,6480,6482],{"class":141,"line":166},[139,6465,6127],{"class":149},[139,6467,179],{"class":159},[139,6469,866],{"class":149},[139,6471,314],{"class":159},[139,6473,846],{"class":182},[139,6475,186],{"class":159},[139,6477,1002],{"class":1001},[139,6479,160],{"class":159},[139,6481,6132],{"class":182},[139,6483,198],{"class":159},[139,6485,6486,6488,6490,6492,6494,6496,6498,6500,6502],{"class":141,"line":173},[139,6487,517],{"class":182},[139,6489,186],{"class":159},[139,6491,4465],{"class":182},[139,6493,186],{"class":159},[139,6495,6239],{"class":182},[139,6497,314],{"class":159},[139,6499,6380],{"class":526},[139,6501,838],{"class":159},[139,6503,6504],{"class":538},"   # 2\n",[139,6506,6507],{"class":141,"line":201},[139,6508,170],{"emptyLinePlaceholder":169},[139,6510,6511],{"class":141,"line":542},[139,6512,6513],{"class":538},"# Metadata only — skip the values query\n",[139,6515,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6536,6539],{"class":141,"line":565},[139,6517,6127],{"class":149},[139,6519,179],{"class":159},[139,6521,866],{"class":149},[139,6523,314],{"class":159},[139,6525,846],{"class":182},[139,6527,186],{"class":159},[139,6529,1002],{"class":1001},[139,6531,160],{"class":159},[139,6533,6132],{"class":182},[139,6535,160],{"class":159},[139,6537,6538],{"class":467}," hydrate_values",[139,6540,6541],{"class":159},"=False)\n",[139,6543,6544,6546,6548,6550,6552,6555,6557],{"class":141,"line":570},[139,6545,517],{"class":182},[139,6547,186],{"class":159},[139,6549,6239],{"class":182},[139,6551,314],{"class":159},[139,6553,6554],{"class":526},"city",[139,6556,535],{"class":159},[139,6558,6559],{"class":538},"          # \"Sparta\"\n",[139,6561,6562,6564,6566,6568,6570,6572,6574],{"class":141,"line":576},[139,6563,517],{"class":182},[139,6565,186],{"class":159},[139,6567,6239],{"class":182},[139,6569,314],{"class":159},[139,6571,6380],{"class":526},[139,6573,535],{"class":159},[139,6575,6576],{"class":538},"        # []\n",[139,6578,6579,6581,6583,6585],{"class":141,"line":597},[139,6580,6239],{"class":149},[139,6582,314],{"class":159},[139,6584,5926],{"class":526},[139,6586,6587],{"class":538},"                   # raises ValuesNotHydratedError — see [Exceptions](/api/exceptions#valuesnothydratederror)\n",[116,6589,6590,6593],{},[120,6591,6592],{},"hydrate_values=False"," is useful when listing many objects for a summary view where you only need the metadata fields.",[288,6595],{},[125,6597,6599,6081],{"id":6598},"read_objects-override",[120,6600,1359],{},[116,6602,6603],{},"Read objects, optionally filtered by conditions, and hydrate time-series values.",[130,6605,6607],{"className":132,"code":6606,"language":134,"meta":135,"style":135},"results = coll.read_objects(WeatherStation)\n",[120,6608,6609],{"__ignoreMap":135},[139,6610,6611,6613,6615,6617,6619,6621,6623,6626],{"class":141,"line":142},[139,6612,1399],{"class":149},[139,6614,179],{"class":159},[139,6616,866],{"class":149},[139,6618,314],{"class":159},[139,6620,1359],{"class":182},[139,6622,186],{"class":159},[139,6624,6625],{"class":182},"WeatherStation",[139,6627,198],{"class":159},[116,6629,6630],{},[327,6631,6412],{},[227,6633,6634,6646],{},[230,6635,6636],{},[233,6637,6638,6640,6642,6644],{},[236,6639,238],{},[236,6641,241],{},[236,6643,342],{},[236,6645,244],{},[246,6647,6648],{},[233,6649,6650,6654,6658,6662],{},[251,6651,6652],{},[120,6653,6435],{},[251,6655,6656],{},[120,6657,375],{},[251,6659,6660],{},[120,6661,386],{},[251,6663,383,6664,6666],{},[120,6665,380],{},", skip loading values for each result",[130,6668,6670],{"className":132,"code":6669,"language":134,"meta":135,"style":135},"# All stations with values loaded\nstations = coll.read_objects(WeatherStation)\n\n# Metadata only — no values query per object\nstations = coll.read_objects(WeatherStation, hydrate_values=False)\n\n# Filtered with values\nresults = coll.read_objects(\n    WeatherStation.fields.city == \"Sparta\",\n    hydrate_values=True,\n)\n",[120,6671,6672,6677,6696,6700,6705,6727,6731,6736,6750,6773,6781],{"__ignoreMap":135},[139,6673,6674],{"class":141,"line":142},[139,6675,6676],{"class":538},"# All stations with values loaded\n",[139,6678,6679,6682,6684,6686,6688,6690,6692,6694],{"class":141,"line":166},[139,6680,6681],{"class":149},"stations ",[139,6683,179],{"class":159},[139,6685,866],{"class":149},[139,6687,314],{"class":159},[139,6689,1359],{"class":182},[139,6691,186],{"class":159},[139,6693,6625],{"class":182},[139,6695,198],{"class":159},[139,6697,6698],{"class":141,"line":173},[139,6699,170],{"emptyLinePlaceholder":169},[139,6701,6702],{"class":141,"line":201},[139,6703,6704],{"class":538},"# Metadata only — no values query per object\n",[139,6706,6707,6709,6711,6713,6715,6717,6719,6721,6723,6725],{"class":141,"line":542},[139,6708,6681],{"class":149},[139,6710,179],{"class":159},[139,6712,866],{"class":149},[139,6714,314],{"class":159},[139,6716,1359],{"class":182},[139,6718,186],{"class":159},[139,6720,6625],{"class":182},[139,6722,160],{"class":159},[139,6724,6538],{"class":467},[139,6726,6541],{"class":159},[139,6728,6729],{"class":141,"line":565},[139,6730,170],{"emptyLinePlaceholder":169},[139,6732,6733],{"class":141,"line":570},[139,6734,6735],{"class":538},"# Filtered with values\n",[139,6737,6738,6740,6742,6744,6746,6748],{"class":141,"line":576},[139,6739,1399],{"class":149},[139,6741,179],{"class":159},[139,6743,866],{"class":149},[139,6745,314],{"class":159},[139,6747,1359],{"class":182},[139,6749,1700],{"class":159},[139,6751,6752,6755,6757,6759,6761,6763,6765,6767,6769,6771],{"class":141,"line":597},[139,6753,6754],{"class":182},"    WeatherStation",[139,6756,314],{"class":159},[139,6758,1434],{"class":526},[139,6760,314],{"class":159},[139,6762,6554],{"class":526},[139,6764,1441],{"class":159},[139,6766,218],{"class":159},[139,6768,6146],{"class":192},[139,6770,189],{"class":159},[139,6772,1725],{"class":159},[139,6774,6775,6778],{"class":141,"line":1681},[139,6776,6777],{"class":467},"    hydrate_values",[139,6779,6780],{"class":159},"=True,\n",[139,6782,6783],{"class":141,"line":1687},[139,6784,198],{"class":159},[2375,6786,6787,6788,6790,6791,2109,6793,6795,6796,2115,6798,2115,6800,2857,6802,6804,6805,314],{"icon":14},"The time-series override does ",[327,6789,2392],{}," accept ",[120,6792,1541],{},[120,6794,1556],{}," — only ",[120,6797,941],{},[120,6799,6435],{},[120,6801,1512],{},[120,6803,1527],{},". To count without loading values, use the inherited ",[120,6806,6807],{},"count_objects()",[288,6809],{},[125,6811,6813,6081],{"id":6812},"read_latest_object-override",[120,6814,1154],{},[116,6816,6817],{},"Read the most recently edited object of a given type, with optional value hydration.",[130,6819,6820],{"className":132,"code":1165,"language":134,"meta":135,"style":135},[120,6821,6822],{"__ignoreMap":135},[139,6823,6824,6826,6828,6830,6832,6834,6836,6838],{"class":141,"line":142},[139,6825,861],{"class":149},[139,6827,179],{"class":159},[139,6829,866],{"class":149},[139,6831,314],{"class":159},[139,6833,1154],{"class":182},[139,6835,186],{"class":159},[139,6837,1184],{"class":182},[139,6839,198],{"class":159},[116,6841,6842],{},[327,6843,6412],{},[227,6845,6846,6858],{},[230,6847,6848],{},[233,6849,6850,6852,6854,6856],{},[236,6851,238],{},[236,6853,241],{},[236,6855,342],{},[236,6857,244],{},[246,6859,6860],{},[233,6861,6862,6866,6870,6874],{},[251,6863,6864],{},[120,6865,6435],{},[251,6867,6868],{},[120,6869,375],{},[251,6871,6872],{},[120,6873,386],{},[251,6875,383,6876,6878],{},[120,6877,380],{},", skip loading values",[116,6880,6881,6883,6884,1249,6886,1252],{},[327,6882,959],{}," — a deserialized model instance, a raw row when ",[120,6885,967],{},[120,6887,428],{},[130,6889,6891],{"className":132,"code":6890,"language":134,"meta":135,"style":135},"latest = coll.read_latest_object(WeatherStation)\nif latest:\n    print(latest.city)\n    print(latest.df)\n\n# Metadata only\nlatest = coll.read_latest_object(WeatherStation, hydrate_values=False)\n",[120,6892,6893,6911,6919,6933,6947,6951,6956],{"__ignoreMap":135},[139,6894,6895,6897,6899,6901,6903,6905,6907,6909],{"class":141,"line":142},[139,6896,1262],{"class":149},[139,6898,179],{"class":159},[139,6900,866],{"class":149},[139,6902,314],{"class":159},[139,6904,1154],{"class":182},[139,6906,186],{"class":159},[139,6908,6625],{"class":182},[139,6910,198],{"class":159},[139,6912,6913,6915,6917],{"class":141,"line":166},[139,6914,1282],{"class":145},[139,6916,1285],{"class":149},[139,6918,1288],{"class":159},[139,6920,6921,6923,6925,6927,6929,6931],{"class":141,"line":173},[139,6922,1293],{"class":182},[139,6924,186],{"class":159},[139,6926,1298],{"class":182},[139,6928,314],{"class":159},[139,6930,6554],{"class":526},[139,6932,198],{"class":159},[139,6934,6935,6937,6939,6941,6943,6945],{"class":141,"line":201},[139,6936,1293],{"class":182},[139,6938,186],{"class":159},[139,6940,1298],{"class":182},[139,6942,314],{"class":159},[139,6944,5926],{"class":526},[139,6946,198],{"class":159},[139,6948,6949],{"class":141,"line":542},[139,6950,170],{"emptyLinePlaceholder":169},[139,6952,6953],{"class":141,"line":565},[139,6954,6955],{"class":538},"# Metadata only\n",[139,6957,6958,6960,6962,6964,6966,6968,6970,6972,6974,6976],{"class":141,"line":570},[139,6959,1262],{"class":149},[139,6961,179],{"class":159},[139,6963,866],{"class":149},[139,6965,314],{"class":159},[139,6967,1154],{"class":182},[139,6969,186],{"class":159},[139,6971,6625],{"class":182},[139,6973,160],{"class":159},[139,6975,6538],{"class":467},[139,6977,6541],{"class":159},[288,6979],{},[125,6981,6983,6081],{"id":6982},"update_object-override",[120,6984,2988],{},[116,6986,6987,6988,314],{},"Update the object metadata and handle the values according to ",[120,6989,6990],{},"values_mode",[130,6992,6994],{"className":132,"code":6993,"language":134,"meta":135,"style":135},"coll.update_object(obj, values_mode=\"append\")\n",[120,6995,6996],{"__ignoreMap":135},[139,6997,6998,7000,7002,7004,7006,7008,7010,7013,7015,7017,7020,7022],{"class":141,"line":142},[139,6999,311],{"class":149},[139,7001,314],{"class":159},[139,7003,2988],{"class":182},[139,7005,186],{"class":159},[139,7007,321],{"class":182},[139,7009,160],{"class":159},[139,7011,7012],{"class":467}," values_mode",[139,7014,179],{"class":159},[139,7016,189],{"class":159},[139,7018,7019],{"class":192},"append",[139,7021,189],{"class":159},[139,7023,198],{"class":159},[116,7025,7026],{},[327,7027,6412],{},[227,7029,7030,7042],{},[230,7031,7032],{},[233,7033,7034,7036,7038,7040],{},[236,7035,238],{},[236,7037,241],{},[236,7039,342],{},[236,7041,244],{},[246,7043,7044],{},[233,7045,7046,7050,7054,7059],{},[251,7047,7048],{},[120,7049,6990],{},[251,7051,7052],{},[120,7053,273],{},[251,7055,7056],{},[120,7057,7058],{},"\"append\"",[251,7060,7061,7062,7064],{},"How to handle ",[120,7063,6087],{}," — see below",[116,7066,7067],{},[327,7068,7069],{},"Values modes",[7071,7072,7073,7082,7093],"card-group",{},[7074,7075,7078,7081],"card",{"icon":7076,"title":7077},"i-lucide-plus","append (default)",[120,7079,7080],{},"INSERT OR IGNORE"," — inserts new timestamps, skips duplicates. Use for incremental ingestion.",[7074,7083,7086,2109,7089,7092],{"icon":7084,"title":7085},"i-lucide-refresh-cw","upsert",[120,7087,7088],{},"INSERT OR REPLACE",[120,7090,7091],{},"ON CONFLICT DO UPDATE"," — inserts new timestamps, overwrites existing ones. Use when values can be corrected.",[7074,7094,7097,7100],{"icon":7095,"title":7096},"i-lucide-trash-2","replace",[120,7098,7099],{},"DELETE"," all existing values then bulk insert. Use for full replacement of a series.",[130,7102,7104],{"className":132,"code":7103,"language":134,"meta":135,"style":135},"station = coll.read_object_by_id(1, WeatherStation)\nstation.city = \"Rome\"\nstation.values = [CentauroValues(time=\"2025-06-01T10:00:00\", value=26.3)]\n\n# Add new timestamp without touching existing ones\ncoll.update_object(station, values_mode=\"append\")\n\n# Overwrite if the timestamp already exists\ncoll.update_object(station, values_mode=\"upsert\")\n\n# Delete all history and replace with the new list\ncoll.update_object(station, values_mode=\"replace\")\n",[120,7105,7106,7128,7145,7184,7188,7193,7219,7223,7228,7254,7258,7263],{"__ignoreMap":135},[139,7107,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126],{"class":141,"line":142},[139,7109,6127],{"class":149},[139,7111,179],{"class":159},[139,7113,866],{"class":149},[139,7115,314],{"class":159},[139,7117,846],{"class":182},[139,7119,186],{"class":159},[139,7121,1002],{"class":1001},[139,7123,160],{"class":159},[139,7125,6132],{"class":182},[139,7127,198],{"class":159},[139,7129,7130,7132,7134,7136,7138,7140,7143],{"class":141,"line":166},[139,7131,6239],{"class":149},[139,7133,314],{"class":159},[139,7135,6554],{"class":526},[139,7137,3125],{"class":159},[139,7139,218],{"class":159},[139,7141,7142],{"class":192},"Rome",[139,7144,2904],{"class":159},[139,7146,7147,7149,7151,7153,7155,7157,7160,7162,7164,7166,7168,7171,7173,7175,7177,7179,7182],{"class":141,"line":173},[139,7148,6239],{"class":149},[139,7150,314],{"class":159},[139,7152,6380],{"class":526},[139,7154,3125],{"class":159},[139,7156,747],{"class":159},[139,7158,7159],{"class":182},"CentauroValues",[139,7161,186],{"class":159},[139,7163,6168],{"class":467},[139,7165,179],{"class":159},[139,7167,189],{"class":159},[139,7169,7170],{"class":192},"2025-06-01T10:00:00",[139,7172,189],{"class":159},[139,7174,160],{"class":159},[139,7176,6182],{"class":467},[139,7178,179],{"class":159},[139,7180,7181],{"class":1001},"26.3",[139,7183,786],{"class":159},[139,7185,7186],{"class":141,"line":201},[139,7187,170],{"emptyLinePlaceholder":169},[139,7189,7190],{"class":141,"line":542},[139,7191,7192],{"class":538},"# Add new timestamp without touching existing ones\n",[139,7194,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213,7215,7217],{"class":141,"line":565},[139,7196,311],{"class":149},[139,7198,314],{"class":159},[139,7200,2988],{"class":182},[139,7202,186],{"class":159},[139,7204,6239],{"class":182},[139,7206,160],{"class":159},[139,7208,7012],{"class":467},[139,7210,179],{"class":159},[139,7212,189],{"class":159},[139,7214,7019],{"class":192},[139,7216,189],{"class":159},[139,7218,198],{"class":159},[139,7220,7221],{"class":141,"line":570},[139,7222,170],{"emptyLinePlaceholder":169},[139,7224,7225],{"class":141,"line":576},[139,7226,7227],{"class":538},"# Overwrite if the timestamp already exists\n",[139,7229,7230,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252],{"class":141,"line":597},[139,7231,311],{"class":149},[139,7233,314],{"class":159},[139,7235,2988],{"class":182},[139,7237,186],{"class":159},[139,7239,6239],{"class":182},[139,7241,160],{"class":159},[139,7243,7012],{"class":467},[139,7245,179],{"class":159},[139,7247,189],{"class":159},[139,7249,7085],{"class":192},[139,7251,189],{"class":159},[139,7253,198],{"class":159},[139,7255,7256],{"class":141,"line":1681},[139,7257,170],{"emptyLinePlaceholder":169},[139,7259,7260],{"class":141,"line":1687},[139,7261,7262],{"class":538},"# Delete all history and replace with the new list\n",[139,7264,7265,7267,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287],{"class":141,"line":1703},[139,7266,311],{"class":149},[139,7268,314],{"class":159},[139,7270,2988],{"class":182},[139,7272,186],{"class":159},[139,7274,6239],{"class":182},[139,7276,160],{"class":159},[139,7278,7012],{"class":467},[139,7280,179],{"class":159},[139,7282,189],{"class":159},[139,7284,7096],{"class":192},[139,7286,189],{"class":159},[139,7288,198],{"class":159},[288,7290],{},[125,7292,7294,6081],{"id":7293},"refresh-override",[120,7295,3216],{},[116,7297,7298],{},"Re-read both the object metadata and its values from the database in place.",[130,7300,7301],{"className":132,"code":3224,"language":134,"meta":135,"style":135},[120,7302,7303],{"__ignoreMap":135},[139,7304,7305,7307,7309,7311,7313,7315],{"class":141,"line":142},[139,7306,311],{"class":149},[139,7308,314],{"class":159},[139,7310,3216],{"class":182},[139,7312,186],{"class":159},[139,7314,321],{"class":182},[139,7316,198],{"class":159},[130,7318,7320],{"className":132,"code":7319,"language":134,"meta":135,"style":135},"station = coll.read_object_by_id(1, WeatherStation)\n\n# ... another process appends new values ...\n\ncoll.refresh(station)\nprint(len(station.values))  # reflects the current DB state\n",[120,7321,7322,7344,7348,7353,7357,7371],{"__ignoreMap":135},[139,7323,7324,7326,7328,7330,7332,7334,7336,7338,7340,7342],{"class":141,"line":142},[139,7325,6127],{"class":149},[139,7327,179],{"class":159},[139,7329,866],{"class":149},[139,7331,314],{"class":159},[139,7333,846],{"class":182},[139,7335,186],{"class":159},[139,7337,1002],{"class":1001},[139,7339,160],{"class":159},[139,7341,6132],{"class":182},[139,7343,198],{"class":159},[139,7345,7346],{"class":141,"line":166},[139,7347,170],{"emptyLinePlaceholder":169},[139,7349,7350],{"class":141,"line":173},[139,7351,7352],{"class":538},"# ... another process appends new values ...\n",[139,7354,7355],{"class":141,"line":201},[139,7356,170],{"emptyLinePlaceholder":169},[139,7358,7359,7361,7363,7365,7367,7369],{"class":141,"line":542},[139,7360,311],{"class":149},[139,7362,314],{"class":159},[139,7364,3216],{"class":182},[139,7366,186],{"class":159},[139,7368,6239],{"class":182},[139,7370,198],{"class":159},[139,7372,7373,7375,7377,7379,7381,7383,7385,7387,7389],{"class":141,"line":565},[139,7374,517],{"class":182},[139,7376,186],{"class":159},[139,7378,4465],{"class":182},[139,7380,186],{"class":159},[139,7382,6239],{"class":182},[139,7384,314],{"class":159},[139,7386,6380],{"class":526},[139,7388,838],{"class":159},[139,7390,7391],{"class":538},"  # reflects the current DB state\n",[288,7393],{},[112,7395,7397],{"id":7396},"database-tables","Database tables",[227,7399,7400,7410],{},[230,7401,7402],{},[233,7403,7404,7407],{},[236,7405,7406],{},"Collection type",[236,7408,7409],{},"Tables created",[246,7411,7412,7423],{},[233,7413,7414,7419],{},[251,7415,7416],{},[120,7417,7418],{},"Collection(\"monitoring\")",[251,7420,7421],{},[120,7422,282],{},[233,7424,7425,7430],{},[251,7426,7427],{},[120,7428,7429],{},"TimeSeriesCollection(\"stations\")",[251,7431,7432,2115,7434],{},[120,7433,6069],{},[120,7435,6072],{},[116,7437,7438],{},[327,7439,7440],{},[120,7441,282],{},[227,7443,7444,7455],{},[230,7445,7446],{},[233,7447,7448,7451,7453],{},[236,7449,7450],{},"Column",[236,7452,241],{},[236,7454,244],{},[246,7456,7457,7471,7487,7501,7514],{},[233,7458,7459,7463,7468],{},[251,7460,7461],{},[120,7462,532],{},[251,7464,7465],{},[120,7466,7467],{},"INTEGER",[251,7469,7470],{},"Auto-incremented primary key",[233,7472,7473,7477,7482],{},[251,7474,7475],{},[120,7476,268],{},[251,7478,7479],{},[120,7480,7481],{},"TEXT",[251,7483,7484,7485],{},"Model's ",[120,7486,2399],{},[233,7488,7489,7493,7498],{},[251,7490,7491],{},[120,7492,557],{},[251,7494,7495],{},[120,7496,7497],{},"DATETIME",[251,7499,7500],{},"Timestamp of first insert",[233,7502,7503,7507,7511],{},[251,7504,7505],{},[120,7506,1321],{},[251,7508,7509],{},[120,7510,7497],{},[251,7512,7513],{},"Timestamp of last update",[233,7515,7516,7520,7528],{},[251,7517,7518],{},[120,7519,1120],{},[251,7521,7522,2109,7525],{},[120,7523,7524],{},"JSON",[120,7526,7527],{},"JSONB",[251,7529,7530],{},"Full serialized model",[116,7532,7533],{},[327,7534,7535],{},[120,7536,6072],{},[227,7538,7539,7549],{},[230,7540,7541],{},[233,7542,7543,7545,7547],{},[236,7544,7450],{},[236,7546,241],{},[236,7548,244],{},[246,7550,7551,7569,7582,7597],{},[233,7552,7553,7558,7562],{},[251,7554,7555],{},[120,7556,7557],{},"data_object_id",[251,7559,7560],{},[120,7561,7467],{},[251,7563,7564,7565,7568],{},"Foreign key → ",[120,7566,7567],{},"stations_objects.id"," (CASCADE DELETE)",[233,7570,7571,7575,7579],{},[251,7572,7573],{},[120,7574,6168],{},[251,7576,7577],{},[120,7578,7497],{},[251,7580,7581],{},"Timestamp of the data point (part of composite PK)",[233,7583,7584,7589,7594],{},[251,7585,7586],{},[120,7587,7588],{},"value",[251,7590,7591],{},[120,7592,7593],{},"REAL",[251,7595,7596],{},"Numeric value",[233,7598,7599,7603,7607],{},[251,7600,7601],{},[120,7602,557],{},[251,7604,7605],{},[120,7606,7497],{},[251,7608,7609],{},"When this row was last written",[7611,7612,7613],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":135,"searchDepth":166,"depth":166,"links":7615},[7616,7639,7656],{"id":114,"depth":166,"text":95,"children":7617},[7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632,7633,7634,7635,7636,7637,7638],{"id":127,"depth":173,"text":128},{"id":292,"depth":173,"text":292},{"id":621,"depth":173,"text":621},{"id":846,"depth":173,"text":846},{"id":1154,"depth":173,"text":1154},{"id":1359,"depth":173,"text":1359},{"id":2139,"depth":173,"text":2139},{"id":2651,"depth":173,"text":2651},{"id":2988,"depth":173,"text":2988},{"id":3216,"depth":173,"text":3216},{"id":3367,"depth":173,"text":3367},{"id":3538,"depth":173,"text":3538},{"id":3859,"depth":173,"text":3859},{"id":4159,"depth":173,"text":4159},{"id":4515,"depth":173,"text":4515},{"id":4883,"depth":173,"text":4883},{"id":5100,"depth":173,"text":5100},{"id":5251,"depth":173,"text":5251},{"id":5419,"depth":173,"text":5419},{"id":5561,"depth":173,"text":5561},{"id":2873,"depth":173,"text":2873},{"id":5991,"depth":166,"text":446,"children":7640},[7641,7642,7644,7646,7648,7650,7652,7654],{"id":6019,"depth":173,"text":128},{"id":6078,"depth":173,"text":7643},"write_object (override)",{"id":6267,"depth":173,"text":7645},"write_objects (override)",{"id":6372,"depth":173,"text":7647},"read_object_by_id (override)",{"id":6598,"depth":173,"text":7649},"read_objects (override)",{"id":6812,"depth":173,"text":7651},"read_latest_object (override)",{"id":6982,"depth":173,"text":7653},"update_object (override)",{"id":7293,"depth":173,"text":7655},"refresh (override)",{"id":7396,"depth":166,"text":7397},"API reference for Collection and TimeSeriesCollection.","md",null,{},{"icon":41},{"title":95,"description":7657},"dsjIt3lb5nz24JLgl7dgkYvpd0QR3lD6FQZX7HX3Nio",[7665,7667],{"title":90,"path":91,"stem":92,"description":7666,"icon":93,"children":-1},"API reference for the Engine class.",{"title":33,"path":99,"stem":100,"description":7668,"icon":36,"children":-1},"API reference for CentauroModel, CentauroModelSeries, CentauroValues, and RowFields.",1781105062880]