[{"data":1,"prerenderedAt":2021},["ShallowReactive",2],{"navigation_docs":3,"-advanced-async":106,"-advanced-async-surround":2016},[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":69,"body":108,"description":2009,"extension":2010,"links":2011,"meta":2012,"navigation":2013,"path":70,"seo":2014,"stem":71,"__hash__":2015},"docs/3.advanced/2.async.md",{"type":109,"value":110,"toc":2000},"minimark",[111,120,125,132,240,256,263,267,270,915,919,1370,1374,1377,1499,1503,1506,1804,1808,1815,1926,1930,1933,1940,1989,1996],[112,113,114,115,119],"p",{},"CentauroDB provides async wrappers for both collection types. Every method uses ",[116,117,118],"code",{},"asyncio.to_thread"," under the hood, so database operations don't block your event loop. This guide covers setup, usage patterns, and integration with async frameworks.",[121,122,124],"h2",{"id":123},"setup","Setup",[112,126,127,128,131],{},"Create the engine with ",[116,129,130],{},"check_same_thread=False"," — async operations run in a background thread, so SQLite's default thread-safety check must be disabled:",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from centaurodb import Engine, AsyncCollection, CentauroModel\n\nengine = Engine(\"app.db\", check_same_thread=False)\nitems = AsyncCollection(engine, \"items\")\n","python","",[116,140,141,172,179,212],{"__ignoreMap":138},[142,143,146,150,154,157,160,164,167,169],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"s7zQu","from",[142,151,153],{"class":152},"sTEyZ"," centaurodb ",[142,155,156],{"class":148},"import",[142,158,159],{"class":152}," Engine",[142,161,163],{"class":162},"sMK4o",",",[142,165,166],{"class":152}," AsyncCollection",[142,168,163],{"class":162},[142,170,171],{"class":152}," CentauroModel\n",[142,173,175],{"class":144,"line":174},2,[142,176,178],{"emptyLinePlaceholder":177},true,"\n",[142,180,182,185,188,191,194,197,201,203,205,209],{"class":144,"line":181},3,[142,183,184],{"class":152},"engine ",[142,186,187],{"class":162},"=",[142,189,159],{"class":190},"s2Zo4",[142,192,193],{"class":162},"(",[142,195,196],{"class":162},"\"",[142,198,200],{"class":199},"sfazB","app.db",[142,202,196],{"class":162},[142,204,163],{"class":162},[142,206,208],{"class":207},"sHdIc"," check_same_thread",[142,210,211],{"class":162},"=False)\n",[142,213,215,218,220,222,224,227,229,232,235,237],{"class":144,"line":214},4,[142,216,217],{"class":152},"items ",[142,219,187],{"class":162},[142,221,166],{"class":190},[142,223,193],{"class":162},[142,225,226],{"class":190},"engine",[142,228,163],{"class":162},[142,230,231],{"class":162}," \"",[142,233,234],{"class":199},"items",[142,236,196],{"class":162},[142,238,239],{"class":162},")\n",[241,242,243,244,246,247,250,251,255],"warning",{},"If you forget ",[116,245,130],{},", creating an async collection raises ",[116,248,249],{},"ThreadSafetyError",". See the ",[252,253,254],"a",{"href":91},"Engine API"," for all constructor parameters.",[257,258,259,260,262],"callout",{"icon":14},"Async collections share the same ",[116,261,90],{}," instance as their sync counterparts — no separate connection pool is needed.",[121,264,266],{"id":265},"complete-async-workflow","Complete async workflow",[112,268,269],{},"All methods mirror their sync counterparts, but return awaitables:",[133,271,273],{"className":135,"code":272,"language":137,"meta":138,"style":138},"class Task(CentauroModel):\n    __centauro_name__ = \"Task\"\n    title: str = \"\"\n    status: str = \"pending\"\n    priority: int = 0\n\nasync def main():\n    # Write\n    task = Task(title=\"Slay the Hydra\", status=\"pending\", priority=2)\n    await items.write_object(task)\n\n    # Batch write\n    await items.write_objects([\n        Task(title=\"Retrieve the Golden Fleece\", priority=3),\n        Task(title=\"Map the Labyrinth\", priority=1),\n    ])\n\n    # Read\n    loaded = await items.read_object_by_id(task.row.id, Task)\n    print(loaded.title)  # \"Slay the Hydra\"\n\n    # Query\n    pending = await items.read_objects(\n        Task.fields.status == \"pending\"\n    )\n    high_priority = await items.read_objects(\n        Task.fields.priority > 1\n    )\n\n    # Latest\n    latest = await items.read_latest_object(Task)\n\n    # Update\n    loaded.status = \"done\"\n    await items.update_object(loaded)\n\n    # Refresh\n    await items.refresh(loaded)\n\n    # Delete\n    await items.delete_object(loaded)\n\n    # Bulk delete\n    count = await items.delete_objects(Task.fields.status == \"done\")\n",[116,274,275,293,308,325,343,360,365,380,387,436,458,463,469,484,515,544,550,555,561,600,621,626,632,652,676,682,700,720,725,730,736,759,764,770,789,807,812,818,836,841,847,865,870,876],{"__ignoreMap":138},[142,276,277,281,285,287,290],{"class":144,"line":145},[142,278,280],{"class":279},"spNyl","class",[142,282,284],{"class":283},"sBMFI"," Task",[142,286,193],{"class":162},[142,288,289],{"class":283},"CentauroModel",[142,291,292],{"class":162},"):\n",[142,294,295,298,300,302,305],{"class":144,"line":174},[142,296,297],{"class":152},"    __centauro_name__ ",[142,299,187],{"class":162},[142,301,231],{"class":162},[142,303,304],{"class":199},"Task",[142,306,307],{"class":162},"\"\n",[142,309,310,313,316,319,322],{"class":144,"line":181},[142,311,312],{"class":152},"    title",[142,314,315],{"class":162},":",[142,317,318],{"class":283}," str",[142,320,321],{"class":162}," =",[142,323,324],{"class":162}," \"\"\n",[142,326,327,330,332,334,336,338,341],{"class":144,"line":214},[142,328,329],{"class":152},"    status",[142,331,315],{"class":162},[142,333,318],{"class":283},[142,335,321],{"class":162},[142,337,231],{"class":162},[142,339,340],{"class":199},"pending",[142,342,307],{"class":162},[142,344,346,349,351,354,356],{"class":144,"line":345},5,[142,347,348],{"class":152},"    priority",[142,350,315],{"class":162},[142,352,353],{"class":283}," int",[142,355,321],{"class":162},[142,357,359],{"class":358},"sbssI"," 0\n",[142,361,363],{"class":144,"line":362},6,[142,364,178],{"emptyLinePlaceholder":177},[142,366,368,371,374,377],{"class":144,"line":367},7,[142,369,370],{"class":279},"async",[142,372,373],{"class":279}," def",[142,375,376],{"class":190}," main",[142,378,379],{"class":162},"():\n",[142,381,383],{"class":144,"line":382},8,[142,384,386],{"class":385},"sHwdD","    # Write\n",[142,388,390,393,395,397,399,402,404,406,409,411,413,416,418,420,422,424,426,429,431,434],{"class":144,"line":389},9,[142,391,392],{"class":152},"    task ",[142,394,187],{"class":162},[142,396,284],{"class":190},[142,398,193],{"class":162},[142,400,401],{"class":207},"title",[142,403,187],{"class":162},[142,405,196],{"class":162},[142,407,408],{"class":199},"Slay the Hydra",[142,410,196],{"class":162},[142,412,163],{"class":162},[142,414,415],{"class":207}," status",[142,417,187],{"class":162},[142,419,196],{"class":162},[142,421,340],{"class":199},[142,423,196],{"class":162},[142,425,163],{"class":162},[142,427,428],{"class":207}," priority",[142,430,187],{"class":162},[142,432,433],{"class":358},"2",[142,435,239],{"class":162},[142,437,439,442,445,448,451,453,456],{"class":144,"line":438},10,[142,440,441],{"class":148},"    await",[142,443,444],{"class":152}," items",[142,446,447],{"class":162},".",[142,449,450],{"class":190},"write_object",[142,452,193],{"class":162},[142,454,455],{"class":190},"task",[142,457,239],{"class":162},[142,459,461],{"class":144,"line":460},11,[142,462,178],{"emptyLinePlaceholder":177},[142,464,466],{"class":144,"line":465},12,[142,467,468],{"class":385},"    # Batch write\n",[142,470,472,474,476,478,481],{"class":144,"line":471},13,[142,473,441],{"class":148},[142,475,444],{"class":152},[142,477,447],{"class":162},[142,479,480],{"class":190},"write_objects",[142,482,483],{"class":162},"([\n",[142,485,487,490,492,494,496,498,501,503,505,507,509,512],{"class":144,"line":486},14,[142,488,489],{"class":190},"        Task",[142,491,193],{"class":162},[142,493,401],{"class":207},[142,495,187],{"class":162},[142,497,196],{"class":162},[142,499,500],{"class":199},"Retrieve the Golden Fleece",[142,502,196],{"class":162},[142,504,163],{"class":162},[142,506,428],{"class":207},[142,508,187],{"class":162},[142,510,511],{"class":358},"3",[142,513,514],{"class":162},"),\n",[142,516,518,520,522,524,526,528,531,533,535,537,539,542],{"class":144,"line":517},15,[142,519,489],{"class":190},[142,521,193],{"class":162},[142,523,401],{"class":207},[142,525,187],{"class":162},[142,527,196],{"class":162},[142,529,530],{"class":199},"Map the Labyrinth",[142,532,196],{"class":162},[142,534,163],{"class":162},[142,536,428],{"class":207},[142,538,187],{"class":162},[142,540,541],{"class":358},"1",[142,543,514],{"class":162},[142,545,547],{"class":144,"line":546},16,[142,548,549],{"class":162},"    ])\n",[142,551,553],{"class":144,"line":552},17,[142,554,178],{"emptyLinePlaceholder":177},[142,556,558],{"class":144,"line":557},18,[142,559,560],{"class":385},"    # Read\n",[142,562,564,567,569,572,574,576,579,581,583,585,589,591,594,596,598],{"class":144,"line":563},19,[142,565,566],{"class":152},"    loaded ",[142,568,187],{"class":162},[142,570,571],{"class":148}," await",[142,573,444],{"class":152},[142,575,447],{"class":162},[142,577,578],{"class":190},"read_object_by_id",[142,580,193],{"class":162},[142,582,455],{"class":190},[142,584,447],{"class":162},[142,586,588],{"class":587},"swJcz","row",[142,590,447],{"class":162},[142,592,593],{"class":587},"id",[142,595,163],{"class":162},[142,597,284],{"class":190},[142,599,239],{"class":162},[142,601,603,606,608,611,613,615,618],{"class":144,"line":602},20,[142,604,605],{"class":190},"    print",[142,607,193],{"class":162},[142,609,610],{"class":190},"loaded",[142,612,447],{"class":162},[142,614,401],{"class":587},[142,616,617],{"class":162},")",[142,619,620],{"class":385},"  # \"Slay the Hydra\"\n",[142,622,624],{"class":144,"line":623},21,[142,625,178],{"emptyLinePlaceholder":177},[142,627,629],{"class":144,"line":628},22,[142,630,631],{"class":385},"    # Query\n",[142,633,635,638,640,642,644,646,649],{"class":144,"line":634},23,[142,636,637],{"class":152},"    pending ",[142,639,187],{"class":162},[142,641,571],{"class":148},[142,643,444],{"class":152},[142,645,447],{"class":162},[142,647,648],{"class":190},"read_objects",[142,650,651],{"class":162},"(\n",[142,653,655,657,659,662,664,667,670,672,674],{"class":144,"line":654},24,[142,656,489],{"class":190},[142,658,447],{"class":162},[142,660,661],{"class":587},"fields",[142,663,447],{"class":162},[142,665,666],{"class":587},"status",[142,668,669],{"class":162}," ==",[142,671,231],{"class":162},[142,673,340],{"class":199},[142,675,307],{"class":162},[142,677,679],{"class":144,"line":678},25,[142,680,681],{"class":162},"    )\n",[142,683,685,688,690,692,694,696,698],{"class":144,"line":684},26,[142,686,687],{"class":152},"    high_priority ",[142,689,187],{"class":162},[142,691,571],{"class":148},[142,693,444],{"class":152},[142,695,447],{"class":162},[142,697,648],{"class":190},[142,699,651],{"class":162},[142,701,703,705,707,709,711,714,717],{"class":144,"line":702},27,[142,704,489],{"class":190},[142,706,447],{"class":162},[142,708,661],{"class":587},[142,710,447],{"class":162},[142,712,713],{"class":587},"priority",[142,715,716],{"class":162}," >",[142,718,719],{"class":358}," 1\n",[142,721,723],{"class":144,"line":722},28,[142,724,681],{"class":162},[142,726,728],{"class":144,"line":727},29,[142,729,178],{"emptyLinePlaceholder":177},[142,731,733],{"class":144,"line":732},30,[142,734,735],{"class":385},"    # Latest\n",[142,737,739,742,744,746,748,750,753,755,757],{"class":144,"line":738},31,[142,740,741],{"class":152},"    latest ",[142,743,187],{"class":162},[142,745,571],{"class":148},[142,747,444],{"class":152},[142,749,447],{"class":162},[142,751,752],{"class":190},"read_latest_object",[142,754,193],{"class":162},[142,756,304],{"class":190},[142,758,239],{"class":162},[142,760,762],{"class":144,"line":761},32,[142,763,178],{"emptyLinePlaceholder":177},[142,765,767],{"class":144,"line":766},33,[142,768,769],{"class":385},"    # Update\n",[142,771,773,776,778,780,782,784,787],{"class":144,"line":772},34,[142,774,775],{"class":152},"    loaded",[142,777,447],{"class":162},[142,779,666],{"class":587},[142,781,321],{"class":162},[142,783,231],{"class":162},[142,785,786],{"class":199},"done",[142,788,307],{"class":162},[142,790,792,794,796,798,801,803,805],{"class":144,"line":791},35,[142,793,441],{"class":148},[142,795,444],{"class":152},[142,797,447],{"class":162},[142,799,800],{"class":190},"update_object",[142,802,193],{"class":162},[142,804,610],{"class":190},[142,806,239],{"class":162},[142,808,810],{"class":144,"line":809},36,[142,811,178],{"emptyLinePlaceholder":177},[142,813,815],{"class":144,"line":814},37,[142,816,817],{"class":385},"    # Refresh\n",[142,819,821,823,825,827,830,832,834],{"class":144,"line":820},38,[142,822,441],{"class":148},[142,824,444],{"class":152},[142,826,447],{"class":162},[142,828,829],{"class":190},"refresh",[142,831,193],{"class":162},[142,833,610],{"class":190},[142,835,239],{"class":162},[142,837,839],{"class":144,"line":838},39,[142,840,178],{"emptyLinePlaceholder":177},[142,842,844],{"class":144,"line":843},40,[142,845,846],{"class":385},"    # Delete\n",[142,848,850,852,854,856,859,861,863],{"class":144,"line":849},41,[142,851,441],{"class":148},[142,853,444],{"class":152},[142,855,447],{"class":162},[142,857,858],{"class":190},"delete_object",[142,860,193],{"class":162},[142,862,610],{"class":190},[142,864,239],{"class":162},[142,866,868],{"class":144,"line":867},42,[142,869,178],{"emptyLinePlaceholder":177},[142,871,873],{"class":144,"line":872},43,[142,874,875],{"class":385},"    # Bulk delete\n",[142,877,879,882,884,886,888,890,893,895,897,899,901,903,905,907,909,911,913],{"class":144,"line":878},44,[142,880,881],{"class":152},"    count ",[142,883,187],{"class":162},[142,885,571],{"class":148},[142,887,444],{"class":152},[142,889,447],{"class":162},[142,891,892],{"class":190},"delete_objects",[142,894,193],{"class":162},[142,896,304],{"class":190},[142,898,447],{"class":162},[142,900,661],{"class":587},[142,902,447],{"class":162},[142,904,666],{"class":587},[142,906,669],{"class":162},[142,908,231],{"class":162},[142,910,786],{"class":199},[142,912,196],{"class":162},[142,914,239],{"class":162},[121,916,918],{"id":917},"asynctimeseriescollection","AsyncTimeSeriesCollection",[133,920,922],{"className":135,"code":921,"language":137,"meta":138,"style":138},"from centaurodb import AsyncTimeSeriesCollection, CentauroModelSeries, CentauroValues\n\nengine = Engine(\"metrics.db\", check_same_thread=False)\nmetrics = AsyncTimeSeriesCollection(engine, \"metrics\")\n\nclass CPUMetric(CentauroModelSeries):\n    __centauro_name__ = \"CPUMetric\"\n    host: str = \"\"\n\nasync def ingest():\n    metric = CPUMetric(\n        host=\"pegasus-01\",\n        values=[\n            CentauroValues(time=\"2025-06-01T08:00:00\", value=45.2),\n            CentauroValues(time=\"2025-06-01T08:01:00\", value=62.1),\n        ],\n    )\n    await metrics.write_object(metric)\n\n    # Read with values\n    loaded = await metrics.read_object_by_id(metric.row.id, CPUMetric)\n    print(loaded.df)\n\n    # Read metadata only\n    light = await metrics.read_object_by_id(\n        metric.row.id, CPUMetric, hydrate_values=False\n    )\n\n    # Update with append mode\n    metric.values = [CentauroValues(time=\"2025-06-01T08:02:00\", value=55.8)]\n    await metrics.update_object(metric, values_mode=\"append\")\n",[116,923,924,945,949,972,996,1000,1014,1027,1040,1044,1055,1066,1083,1091,1122,1150,1155,1159,1177,1181,1186,1218,1233,1237,1242,1259,1284,1288,1292,1297,1340],{"__ignoreMap":138},[142,925,926,928,930,932,935,937,940,942],{"class":144,"line":145},[142,927,149],{"class":148},[142,929,153],{"class":152},[142,931,156],{"class":148},[142,933,934],{"class":152}," AsyncTimeSeriesCollection",[142,936,163],{"class":162},[142,938,939],{"class":152}," CentauroModelSeries",[142,941,163],{"class":162},[142,943,944],{"class":152}," CentauroValues\n",[142,946,947],{"class":144,"line":174},[142,948,178],{"emptyLinePlaceholder":177},[142,950,951,953,955,957,959,961,964,966,968,970],{"class":144,"line":181},[142,952,184],{"class":152},[142,954,187],{"class":162},[142,956,159],{"class":190},[142,958,193],{"class":162},[142,960,196],{"class":162},[142,962,963],{"class":199},"metrics.db",[142,965,196],{"class":162},[142,967,163],{"class":162},[142,969,208],{"class":207},[142,971,211],{"class":162},[142,973,974,977,979,981,983,985,987,989,992,994],{"class":144,"line":214},[142,975,976],{"class":152},"metrics ",[142,978,187],{"class":162},[142,980,934],{"class":190},[142,982,193],{"class":162},[142,984,226],{"class":190},[142,986,163],{"class":162},[142,988,231],{"class":162},[142,990,991],{"class":199},"metrics",[142,993,196],{"class":162},[142,995,239],{"class":162},[142,997,998],{"class":144,"line":345},[142,999,178],{"emptyLinePlaceholder":177},[142,1001,1002,1004,1007,1009,1012],{"class":144,"line":362},[142,1003,280],{"class":279},[142,1005,1006],{"class":283}," CPUMetric",[142,1008,193],{"class":162},[142,1010,1011],{"class":283},"CentauroModelSeries",[142,1013,292],{"class":162},[142,1015,1016,1018,1020,1022,1025],{"class":144,"line":367},[142,1017,297],{"class":152},[142,1019,187],{"class":162},[142,1021,231],{"class":162},[142,1023,1024],{"class":199},"CPUMetric",[142,1026,307],{"class":162},[142,1028,1029,1032,1034,1036,1038],{"class":144,"line":382},[142,1030,1031],{"class":152},"    host",[142,1033,315],{"class":162},[142,1035,318],{"class":283},[142,1037,321],{"class":162},[142,1039,324],{"class":162},[142,1041,1042],{"class":144,"line":389},[142,1043,178],{"emptyLinePlaceholder":177},[142,1045,1046,1048,1050,1053],{"class":144,"line":438},[142,1047,370],{"class":279},[142,1049,373],{"class":279},[142,1051,1052],{"class":190}," ingest",[142,1054,379],{"class":162},[142,1056,1057,1060,1062,1064],{"class":144,"line":460},[142,1058,1059],{"class":152},"    metric ",[142,1061,187],{"class":162},[142,1063,1006],{"class":190},[142,1065,651],{"class":162},[142,1067,1068,1071,1073,1075,1078,1080],{"class":144,"line":465},[142,1069,1070],{"class":207},"        host",[142,1072,187],{"class":162},[142,1074,196],{"class":162},[142,1076,1077],{"class":199},"pegasus-01",[142,1079,196],{"class":162},[142,1081,1082],{"class":162},",\n",[142,1084,1085,1088],{"class":144,"line":471},[142,1086,1087],{"class":207},"        values",[142,1089,1090],{"class":162},"=[\n",[142,1092,1093,1096,1098,1101,1103,1105,1108,1110,1112,1115,1117,1120],{"class":144,"line":486},[142,1094,1095],{"class":190},"            CentauroValues",[142,1097,193],{"class":162},[142,1099,1100],{"class":207},"time",[142,1102,187],{"class":162},[142,1104,196],{"class":162},[142,1106,1107],{"class":199},"2025-06-01T08:00:00",[142,1109,196],{"class":162},[142,1111,163],{"class":162},[142,1113,1114],{"class":207}," value",[142,1116,187],{"class":162},[142,1118,1119],{"class":358},"45.2",[142,1121,514],{"class":162},[142,1123,1124,1126,1128,1130,1132,1134,1137,1139,1141,1143,1145,1148],{"class":144,"line":517},[142,1125,1095],{"class":190},[142,1127,193],{"class":162},[142,1129,1100],{"class":207},[142,1131,187],{"class":162},[142,1133,196],{"class":162},[142,1135,1136],{"class":199},"2025-06-01T08:01:00",[142,1138,196],{"class":162},[142,1140,163],{"class":162},[142,1142,1114],{"class":207},[142,1144,187],{"class":162},[142,1146,1147],{"class":358},"62.1",[142,1149,514],{"class":162},[142,1151,1152],{"class":144,"line":546},[142,1153,1154],{"class":162},"        ],\n",[142,1156,1157],{"class":144,"line":552},[142,1158,681],{"class":162},[142,1160,1161,1163,1166,1168,1170,1172,1175],{"class":144,"line":557},[142,1162,441],{"class":148},[142,1164,1165],{"class":152}," metrics",[142,1167,447],{"class":162},[142,1169,450],{"class":190},[142,1171,193],{"class":162},[142,1173,1174],{"class":190},"metric",[142,1176,239],{"class":162},[142,1178,1179],{"class":144,"line":563},[142,1180,178],{"emptyLinePlaceholder":177},[142,1182,1183],{"class":144,"line":602},[142,1184,1185],{"class":385},"    # Read with values\n",[142,1187,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216],{"class":144,"line":623},[142,1189,566],{"class":152},[142,1191,187],{"class":162},[142,1193,571],{"class":148},[142,1195,1165],{"class":152},[142,1197,447],{"class":162},[142,1199,578],{"class":190},[142,1201,193],{"class":162},[142,1203,1174],{"class":190},[142,1205,447],{"class":162},[142,1207,588],{"class":587},[142,1209,447],{"class":162},[142,1211,593],{"class":587},[142,1213,163],{"class":162},[142,1215,1006],{"class":190},[142,1217,239],{"class":162},[142,1219,1220,1222,1224,1226,1228,1231],{"class":144,"line":628},[142,1221,605],{"class":190},[142,1223,193],{"class":162},[142,1225,610],{"class":190},[142,1227,447],{"class":162},[142,1229,1230],{"class":587},"df",[142,1232,239],{"class":162},[142,1234,1235],{"class":144,"line":634},[142,1236,178],{"emptyLinePlaceholder":177},[142,1238,1239],{"class":144,"line":654},[142,1240,1241],{"class":385},"    # Read metadata only\n",[142,1243,1244,1247,1249,1251,1253,1255,1257],{"class":144,"line":678},[142,1245,1246],{"class":152},"    light ",[142,1248,187],{"class":162},[142,1250,571],{"class":148},[142,1252,1165],{"class":152},[142,1254,447],{"class":162},[142,1256,578],{"class":190},[142,1258,651],{"class":162},[142,1260,1261,1264,1266,1268,1270,1272,1274,1276,1278,1281],{"class":144,"line":684},[142,1262,1263],{"class":190},"        metric",[142,1265,447],{"class":162},[142,1267,588],{"class":587},[142,1269,447],{"class":162},[142,1271,593],{"class":587},[142,1273,163],{"class":162},[142,1275,1006],{"class":190},[142,1277,163],{"class":162},[142,1279,1280],{"class":207}," hydrate_values",[142,1282,1283],{"class":162},"=False\n",[142,1285,1286],{"class":144,"line":702},[142,1287,681],{"class":162},[142,1289,1290],{"class":144,"line":722},[142,1291,178],{"emptyLinePlaceholder":177},[142,1293,1294],{"class":144,"line":727},[142,1295,1296],{"class":385},"    # Update with append mode\n",[142,1298,1299,1302,1304,1307,1309,1312,1315,1317,1319,1321,1323,1326,1328,1330,1332,1334,1337],{"class":144,"line":732},[142,1300,1301],{"class":152},"    metric",[142,1303,447],{"class":162},[142,1305,1306],{"class":587},"values",[142,1308,321],{"class":162},[142,1310,1311],{"class":162}," [",[142,1313,1314],{"class":190},"CentauroValues",[142,1316,193],{"class":162},[142,1318,1100],{"class":207},[142,1320,187],{"class":162},[142,1322,196],{"class":162},[142,1324,1325],{"class":199},"2025-06-01T08:02:00",[142,1327,196],{"class":162},[142,1329,163],{"class":162},[142,1331,1114],{"class":207},[142,1333,187],{"class":162},[142,1335,1336],{"class":358},"55.8",[142,1338,1339],{"class":162},")]\n",[142,1341,1342,1344,1346,1348,1350,1352,1354,1356,1359,1361,1363,1366,1368],{"class":144,"line":738},[142,1343,441],{"class":148},[142,1345,1165],{"class":152},[142,1347,447],{"class":162},[142,1349,800],{"class":190},[142,1351,193],{"class":162},[142,1353,1174],{"class":190},[142,1355,163],{"class":162},[142,1357,1358],{"class":207}," values_mode",[142,1360,187],{"class":162},[142,1362,196],{"class":162},[142,1364,1365],{"class":199},"append",[142,1367,196],{"class":162},[142,1369,239],{"class":162},[121,1371,1373],{"id":1372},"views-and-indexes-async","Views and indexes (async)",[112,1375,1376],{},"View operations are also async:",[133,1378,1380],{"className":135,"code":1379,"language":137,"meta":138,"style":138},"await items.create_view(\"dashboard\", Task)\n\n# Indexes are managed on the sync base — no await needed\nitems.create_index(\"status\")\nitems.create_index(\"priority\")\nawait items.refresh_view(\"dashboard\", Task)\nviews = await items.describe_views()\n",[116,1381,1382,1409,1413,1418,1437,1455,1480],{"__ignoreMap":138},[142,1383,1384,1387,1389,1391,1394,1396,1398,1401,1403,1405,1407],{"class":144,"line":145},[142,1385,1386],{"class":148},"await",[142,1388,444],{"class":152},[142,1390,447],{"class":162},[142,1392,1393],{"class":190},"create_view",[142,1395,193],{"class":162},[142,1397,196],{"class":162},[142,1399,1400],{"class":199},"dashboard",[142,1402,196],{"class":162},[142,1404,163],{"class":162},[142,1406,284],{"class":190},[142,1408,239],{"class":162},[142,1410,1411],{"class":144,"line":174},[142,1412,178],{"emptyLinePlaceholder":177},[142,1414,1415],{"class":144,"line":181},[142,1416,1417],{"class":385},"# Indexes are managed on the sync base — no await needed\n",[142,1419,1420,1422,1424,1427,1429,1431,1433,1435],{"class":144,"line":214},[142,1421,234],{"class":152},[142,1423,447],{"class":162},[142,1425,1426],{"class":190},"create_index",[142,1428,193],{"class":162},[142,1430,196],{"class":162},[142,1432,666],{"class":199},[142,1434,196],{"class":162},[142,1436,239],{"class":162},[142,1438,1439,1441,1443,1445,1447,1449,1451,1453],{"class":144,"line":345},[142,1440,234],{"class":152},[142,1442,447],{"class":162},[142,1444,1426],{"class":190},[142,1446,193],{"class":162},[142,1448,196],{"class":162},[142,1450,713],{"class":199},[142,1452,196],{"class":162},[142,1454,239],{"class":162},[142,1456,1457,1459,1461,1463,1466,1468,1470,1472,1474,1476,1478],{"class":144,"line":362},[142,1458,1386],{"class":148},[142,1460,444],{"class":152},[142,1462,447],{"class":162},[142,1464,1465],{"class":190},"refresh_view",[142,1467,193],{"class":162},[142,1469,196],{"class":162},[142,1471,1400],{"class":199},[142,1473,196],{"class":162},[142,1475,163],{"class":162},[142,1477,284],{"class":190},[142,1479,239],{"class":162},[142,1481,1482,1485,1487,1489,1491,1493,1496],{"class":144,"line":367},[142,1483,1484],{"class":152},"views ",[142,1486,187],{"class":162},[142,1488,571],{"class":148},[142,1490,444],{"class":152},[142,1492,447],{"class":162},[142,1494,1495],{"class":190},"describe_views",[142,1497,1498],{"class":162},"()\n",[121,1500,1502],{"id":1501},"relations-async","Relations (async)",[112,1504,1505],{},"Parent-child operations work the same way:",[133,1507,1509],{"className":135,"code":1508,"language":137,"meta":138,"style":138},"from centaurodb import parent_ref\n\nclass Project(CentauroModel):\n    __centauro_name__ = \"Project\"\n    name: str = \"\"\n\nclass Issue(CentauroModel):\n    __centauro_name__ = \"Issue\"\n    project: int | None = parent_ref(Project)\n    title: str = \"\"\n\nasync def demo():\n    coll = AsyncCollection(engine, \"quests\")\n\n    project = Project(name=\"The Odyssey\")\n    await coll.write_object(project)\n\n    issue = Issue(title=\"Chart a course past Scylla\")\n    await coll.write_child(issue, parent=project)\n\n    issues = await coll.children_of(project, Issue)\n",[116,1510,1511,1522,1526,1539,1552,1565,1569,1582,1595,1621,1633,1637,1648,1672,1676,1701,1719,1723,1747,1774,1778],{"__ignoreMap":138},[142,1512,1513,1515,1517,1519],{"class":144,"line":145},[142,1514,149],{"class":148},[142,1516,153],{"class":152},[142,1518,156],{"class":148},[142,1520,1521],{"class":152}," parent_ref\n",[142,1523,1524],{"class":144,"line":174},[142,1525,178],{"emptyLinePlaceholder":177},[142,1527,1528,1530,1533,1535,1537],{"class":144,"line":181},[142,1529,280],{"class":279},[142,1531,1532],{"class":283}," Project",[142,1534,193],{"class":162},[142,1536,289],{"class":283},[142,1538,292],{"class":162},[142,1540,1541,1543,1545,1547,1550],{"class":144,"line":214},[142,1542,297],{"class":152},[142,1544,187],{"class":162},[142,1546,231],{"class":162},[142,1548,1549],{"class":199},"Project",[142,1551,307],{"class":162},[142,1553,1554,1557,1559,1561,1563],{"class":144,"line":345},[142,1555,1556],{"class":152},"    name",[142,1558,315],{"class":162},[142,1560,318],{"class":283},[142,1562,321],{"class":162},[142,1564,324],{"class":162},[142,1566,1567],{"class":144,"line":362},[142,1568,178],{"emptyLinePlaceholder":177},[142,1570,1571,1573,1576,1578,1580],{"class":144,"line":367},[142,1572,280],{"class":279},[142,1574,1575],{"class":283}," Issue",[142,1577,193],{"class":162},[142,1579,289],{"class":283},[142,1581,292],{"class":162},[142,1583,1584,1586,1588,1590,1593],{"class":144,"line":382},[142,1585,297],{"class":152},[142,1587,187],{"class":162},[142,1589,231],{"class":162},[142,1591,1592],{"class":199},"Issue",[142,1594,307],{"class":162},[142,1596,1597,1600,1602,1604,1607,1610,1612,1615,1617,1619],{"class":144,"line":389},[142,1598,1599],{"class":152},"    project",[142,1601,315],{"class":162},[142,1603,353],{"class":283},[142,1605,1606],{"class":162}," |",[142,1608,1609],{"class":162}," None",[142,1611,321],{"class":162},[142,1613,1614],{"class":190}," parent_ref",[142,1616,193],{"class":162},[142,1618,1549],{"class":190},[142,1620,239],{"class":162},[142,1622,1623,1625,1627,1629,1631],{"class":144,"line":438},[142,1624,312],{"class":152},[142,1626,315],{"class":162},[142,1628,318],{"class":283},[142,1630,321],{"class":162},[142,1632,324],{"class":162},[142,1634,1635],{"class":144,"line":460},[142,1636,178],{"emptyLinePlaceholder":177},[142,1638,1639,1641,1643,1646],{"class":144,"line":465},[142,1640,370],{"class":279},[142,1642,373],{"class":279},[142,1644,1645],{"class":190}," demo",[142,1647,379],{"class":162},[142,1649,1650,1653,1655,1657,1659,1661,1663,1665,1668,1670],{"class":144,"line":471},[142,1651,1652],{"class":152},"    coll ",[142,1654,187],{"class":162},[142,1656,166],{"class":190},[142,1658,193],{"class":162},[142,1660,226],{"class":190},[142,1662,163],{"class":162},[142,1664,231],{"class":162},[142,1666,1667],{"class":199},"quests",[142,1669,196],{"class":162},[142,1671,239],{"class":162},[142,1673,1674],{"class":144,"line":486},[142,1675,178],{"emptyLinePlaceholder":177},[142,1677,1678,1681,1683,1685,1687,1690,1692,1694,1697,1699],{"class":144,"line":517},[142,1679,1680],{"class":152},"    project ",[142,1682,187],{"class":162},[142,1684,1532],{"class":190},[142,1686,193],{"class":162},[142,1688,1689],{"class":207},"name",[142,1691,187],{"class":162},[142,1693,196],{"class":162},[142,1695,1696],{"class":199},"The Odyssey",[142,1698,196],{"class":162},[142,1700,239],{"class":162},[142,1702,1703,1705,1708,1710,1712,1714,1717],{"class":144,"line":546},[142,1704,441],{"class":148},[142,1706,1707],{"class":152}," coll",[142,1709,447],{"class":162},[142,1711,450],{"class":190},[142,1713,193],{"class":162},[142,1715,1716],{"class":190},"project",[142,1718,239],{"class":162},[142,1720,1721],{"class":144,"line":552},[142,1722,178],{"emptyLinePlaceholder":177},[142,1724,1725,1728,1730,1732,1734,1736,1738,1740,1743,1745],{"class":144,"line":557},[142,1726,1727],{"class":152},"    issue ",[142,1729,187],{"class":162},[142,1731,1575],{"class":190},[142,1733,193],{"class":162},[142,1735,401],{"class":207},[142,1737,187],{"class":162},[142,1739,196],{"class":162},[142,1741,1742],{"class":199},"Chart a course past Scylla",[142,1744,196],{"class":162},[142,1746,239],{"class":162},[142,1748,1749,1751,1753,1755,1758,1760,1763,1765,1768,1770,1772],{"class":144,"line":563},[142,1750,441],{"class":148},[142,1752,1707],{"class":152},[142,1754,447],{"class":162},[142,1756,1757],{"class":190},"write_child",[142,1759,193],{"class":162},[142,1761,1762],{"class":190},"issue",[142,1764,163],{"class":162},[142,1766,1767],{"class":207}," parent",[142,1769,187],{"class":162},[142,1771,1716],{"class":190},[142,1773,239],{"class":162},[142,1775,1776],{"class":144,"line":602},[142,1777,178],{"emptyLinePlaceholder":177},[142,1779,1780,1783,1785,1787,1789,1791,1794,1796,1798,1800,1802],{"class":144,"line":623},[142,1781,1782],{"class":152},"    issues ",[142,1784,187],{"class":162},[142,1786,571],{"class":148},[142,1788,1707],{"class":152},[142,1790,447],{"class":162},[142,1792,1793],{"class":190},"children_of",[142,1795,193],{"class":162},[142,1797,1716],{"class":190},[142,1799,163],{"class":162},[142,1801,1575],{"class":190},[142,1803,239],{"class":162},[121,1805,1807],{"id":1806},"concurrent-operations","Concurrent operations",[112,1809,1810,1811,1814],{},"Since async collections use ",[116,1812,1813],{},"to_thread",", you can run multiple independent operations concurrently:",[133,1816,1818],{"className":135,"code":1817,"language":137,"meta":138,"style":138},"import asyncio\n\nasync def parallel_reads():\n    sensor_a, sensor_b, latest = await asyncio.gather(\n        metrics.read_object_by_id(1, CPUMetric),\n        metrics.read_object_by_id(2, CPUMetric),\n        metrics.read_latest_object(CPUMetric),\n    )\n",[116,1819,1820,1827,1831,1842,1871,1890,1908,1922],{"__ignoreMap":138},[142,1821,1822,1824],{"class":144,"line":145},[142,1823,156],{"class":148},[142,1825,1826],{"class":152}," asyncio\n",[142,1828,1829],{"class":144,"line":174},[142,1830,178],{"emptyLinePlaceholder":177},[142,1832,1833,1835,1837,1840],{"class":144,"line":181},[142,1834,370],{"class":279},[142,1836,373],{"class":279},[142,1838,1839],{"class":190}," parallel_reads",[142,1841,379],{"class":162},[142,1843,1844,1847,1849,1852,1854,1857,1859,1861,1864,1866,1869],{"class":144,"line":214},[142,1845,1846],{"class":152},"    sensor_a",[142,1848,163],{"class":162},[142,1850,1851],{"class":152}," sensor_b",[142,1853,163],{"class":162},[142,1855,1856],{"class":152}," latest ",[142,1858,187],{"class":162},[142,1860,571],{"class":148},[142,1862,1863],{"class":152}," asyncio",[142,1865,447],{"class":162},[142,1867,1868],{"class":190},"gather",[142,1870,651],{"class":162},[142,1872,1873,1876,1878,1880,1882,1884,1886,1888],{"class":144,"line":345},[142,1874,1875],{"class":190},"        metrics",[142,1877,447],{"class":162},[142,1879,578],{"class":190},[142,1881,193],{"class":162},[142,1883,541],{"class":358},[142,1885,163],{"class":162},[142,1887,1006],{"class":190},[142,1889,514],{"class":162},[142,1891,1892,1894,1896,1898,1900,1902,1904,1906],{"class":144,"line":362},[142,1893,1875],{"class":190},[142,1895,447],{"class":162},[142,1897,578],{"class":190},[142,1899,193],{"class":162},[142,1901,433],{"class":358},[142,1903,163],{"class":162},[142,1905,1006],{"class":190},[142,1907,514],{"class":162},[142,1909,1910,1912,1914,1916,1918,1920],{"class":144,"line":367},[142,1911,1875],{"class":190},[142,1913,447],{"class":162},[142,1915,752],{"class":190},[142,1917,193],{"class":162},[142,1919,1024],{"class":190},[142,1921,514],{"class":162},[142,1923,1924],{"class":144,"line":382},[142,1925,681],{"class":162},[1927,1928,1929],"tip",{},"For truly concurrent writes, make sure each coroutine operates on separate objects. CentauroDB serializes writes through the underlying database connection.",[121,1931,74],{"id":1932},"postgresql",[112,1934,1935,1936,1939],{},"With PostgreSQL, ",[116,1937,1938],{},"check_same_thread"," is not needed — psycopg connections are thread-safe by default:",[133,1941,1943],{"className":135,"code":1942,"language":137,"meta":138,"style":138},"engine = Engine(\"postgresql://user:pass@localhost/mydb\")\nitems = AsyncCollection(engine, \"items\")  # works without check_same_thread\n",[116,1944,1945,1964],{"__ignoreMap":138},[142,1946,1947,1949,1951,1953,1955,1957,1960,1962],{"class":144,"line":145},[142,1948,184],{"class":152},[142,1950,187],{"class":162},[142,1952,159],{"class":190},[142,1954,193],{"class":162},[142,1956,196],{"class":162},[142,1958,1959],{"class":199},"postgresql://user:pass@localhost/mydb",[142,1961,196],{"class":162},[142,1963,239],{"class":162},[142,1965,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986],{"class":144,"line":174},[142,1967,217],{"class":152},[142,1969,187],{"class":162},[142,1971,166],{"class":190},[142,1973,193],{"class":162},[142,1975,226],{"class":190},[142,1977,163],{"class":162},[142,1979,231],{"class":162},[142,1981,234],{"class":199},[142,1983,196],{"class":162},[142,1985,617],{"class":162},[142,1987,1988],{"class":385},"  # works without check_same_thread\n",[112,1990,1991,1992,1995],{},"See the ",[252,1993,1994],{"href":75},"PostgreSQL guide"," for connection setup and backend differences.",[1997,1998,1999],"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 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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":138,"searchDepth":174,"depth":174,"links":2001},[2002,2003,2004,2005,2006,2007,2008],{"id":123,"depth":174,"text":124},{"id":265,"depth":174,"text":266},{"id":917,"depth":174,"text":918},{"id":1372,"depth":174,"text":1373},{"id":1501,"depth":174,"text":1502},{"id":1806,"depth":174,"text":1807},{"id":1932,"depth":174,"text":74},"Use AsyncCollection and AsyncTimeSeriesCollection for non-blocking database operations in async applications.","md",null,{},{"icon":72},{"title":69,"description":2009},"hJSW64nnVn5hcD2_Be8iHU0r9S3Bn8POqLDu8xv7uZk",[2017,2019],{"title":64,"path":65,"stem":66,"description":2018,"icon":67,"children":-1},"Store and query time-series data with TimeSeriesCollection, Polars DataFrames, and flexible update modes.",{"title":74,"path":75,"stem":76,"description":2020,"icon":77,"children":-1},"Switch from SQLite to PostgreSQL — same API, server-grade backend.",1781105062415]