[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5513":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":38,"readmeContent":39,"aiSummary":40,"trendingCount":16,"starSnapshotCount":16,"syncStatus":41,"lastSyncTime":42,"discoverSource":43},5513,"sea-orm","SeaQL\u002Fsea-orm","SeaQL","🐚 A powerful relational ORM for Rust","https:\u002F\u002Fwww.sea-ql.org\u002FSeaORM\u002F",null,"Rust",9704,706,38,159,0,3,29,96,15,39.55,"Apache License 2.0",false,"master",[26,27,28,29,30,31,32,33,34,35,36,37],"database","hacktoberfest","loco","mariadb","mysql","orm","postgres","rust","sql","sqlite","sqlx","tokio","2026-06-12 02:01:11","\u003Cdiv align=\"center\">\n\n  \u003Cimg alt=\"SeaORM\" src=\"https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002Fimg\u002FSeaORM 2.0 Banner.png\"\u002F>\n\n  \u003Ch1>\u003C\u002Fh1>\n  \u003Ch3>SeaORM is a powerful ORM for building web services in Rust\u003C\u002Fh3>\n\n  [![crate](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fsea-orm.svg)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fsea-orm)\n  [![build status](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Factions\u002Fworkflows\u002Frust.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Factions\u002Fworkflows\u002Frust.yml)\n  [![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FSeaQL\u002Fsea-orm.svg?style=social&label=Star&maxAge=1)](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fstargazers\u002F)\n  \u003Cbr>Support us with a ⭐ !\n\n\u003C\u002Fdiv>\n\n# 🐚 SeaORM\n\n[中文文档](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fblob\u002Fmaster\u002FREADME-zh.md)\n\n### Advanced Relations\n\nModel complex relationships 1-1, 1-N, M-N, and even self-referential in a high-level, conceptual way.\n\n### Familiar Concepts\n\nInspired by popular ORMs in the Ruby, Python, and Node.js ecosystem, SeaORM offers a developer experience that feels instantly recognizable.\n\n### Feature Rich\n\nSeaORM is a batteries-included ORM with filters, pagination, and nested queries to accelerate building REST, GraphQL, and gRPC APIs.\n\n### Production Ready\n\nWith 250k+ weekly downloads, SeaORM is production-ready, trusted by startups and enterprises worldwide.\n\n## Getting Started\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F873880840487206962?label=Discord)](https:\u002F\u002Fdiscord.com\u002Finvite\u002FuCPdDXzbdv)\nJoin our Discord server to chat with others!\n\n+ [Documentation](https:\u002F\u002Fwww.sea-ql.org\u002FSeaORM)\n\nIntegration examples:\n\n+ [Actix Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Factix_example)\n+ [Axum Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Faxum_example)\n+ [GraphQL Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fgraphql_example)\n+ [jsonrpsee Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fjsonrpsee_example)\n+ [Loco Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Floco_example) \u002F [Loco REST Starter](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Floco_starter)\n+ [Poem Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fpoem_example)\n+ [Rocket Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Frocket_example) \u002F [Rocket OpenAPI Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Frocket_okapi_example)\n+ [Salvo Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fsalvo_example)\n+ [Tonic Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Ftonic_example)\n+ [Seaography Example (Bakery)](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fseaography_example) \u002F [Seaography Example (Sakila)](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fseaography\u002Ftree\u002Fmain\u002Fexamples\u002Fsqlite)\n\nIf you want a simple, clean example that fits in a single file that demonstrates the best of SeaORM, you can try:\n+ [Quickstart](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fblob\u002Fmaster\u002Fexamples\u002Fquickstart\u002Fsrc\u002Fmain.rs)\n\nLet's have a quick walk through of the unique features of SeaORM.\n\n## Expressive Entity format\nYou don't have to write this by hand! Entity files can be generated from an existing database using `sea-orm-cli`,\nfollowing is generated with `--entity-format dense` *(new in 2.0)*.\n```rust\nmod user {\n    use sea_orm::entity::prelude::*;\n\n    #[sea_orm::model]\n    #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]\n    #[sea_orm(table_name = \"user\")]\n    pub struct Model {\n        #[sea_orm(primary_key)]\n        pub id: i32,\n        pub name: String,\n        #[sea_orm(unique)]\n        pub email: String,\n        #[sea_orm(has_one)]\n        pub profile: HasOne\u003Csuper::profile::Entity>,\n        #[sea_orm(has_many)]\n        pub posts: HasMany\u003Csuper::post::Entity>,\n    }\n}\nmod post {\n    use sea_orm::entity::prelude::*;\n\n    #[sea_orm::model]\n    #[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel)]\n    #[sea_orm(table_name = \"post\")]\n    pub struct Model {\n        #[sea_orm(primary_key)]\n        pub id: i32,\n        pub user_id: i32,\n        pub title: String,\n        #[sea_orm(belongs_to, from = \"user_id\", to = \"id\")]\n        pub author: HasOne\u003Csuper::user::Entity>,\n        #[sea_orm(has_many, via = \"post_tag\")] \u002F\u002F M-N relation with junction\n        pub tags: HasMany\u003Csuper::tag::Entity>,\n    }\n}\n```\n\n## Smart Entity Loader\nThe Entity Loader intelligently uses join for 1-1 and data loader for 1-N relations,\neliminating the N+1 problem even when performing nested queries.\n```rust\n\u002F\u002F join paths:\n\u002F\u002F user -> profile\n\u002F\u002F user -> post\n\u002F\u002F         post -> post_tag -> tag\nlet smart_user = user::Entity::load()\n    .filter_by_id(42) \u002F\u002F shorthand for .filter(user::COLUMN.id.eq(42))\n    .with(profile::Entity) \u002F\u002F 1-1 uses join\n    .with((post::Entity, tag::Entity)) \u002F\u002F 1-N uses data loader\n    .one(db)\n    .await?\n    .unwrap();\n\n\u002F\u002F 3 queries are executed under the hood:\n\u002F\u002F 1. SELECT FROM user JOIN profile WHERE id = $\n\u002F\u002F 2. SELECT FROM post WHERE user_id IN (..)\n\u002F\u002F 3. SELECT FROM tag JOIN post_tag WHERE post_id IN (..)\n\nsmart_user\n    == user::ModelEx {\n        id: 42,\n        name: \"Bob\".into(),\n        email: \"bob@sea-ql.org\".into(),\n        profile: HasOne::Loaded(\n            profile::ModelEx {\n                picture: \"image.jpg\".into(),\n            }\n            .into(),\n        ),\n        posts: HasMany::Loaded(vec![post::ModelEx {\n            title: \"Nice weather\".into(),\n            tags: HasMany::Loaded(vec![tag::ModelEx {\n                tag: \"sunny\".into(),\n            }]),\n        }]),\n    };\n```\n\n## ActiveModel: nested persistence made simple\nPersist an entire object graph: user, profile (1-1), posts (1-N), and tags (M-N)\nin a single operation using a fluent builder API. SeaORM automatically determines\nthe dependencies and inserts or deletes objects in the correct order.\n\n```rust\n\u002F\u002F this creates the nested object as shown above:\nlet user = user::ActiveModel::builder()\n    .set_name(\"Bob\")\n    .set_email(\"bob@sea-ql.org\")\n    .set_profile(profile::ActiveModel::builder().set_picture(\"image.jpg\"))\n    .add_post(\n        post::ActiveModel::builder()\n            .set_title(\"Nice weather\")\n            .add_tag(tag::ActiveModel::builder().set_tag(\"sunny\")),\n    )\n    .save(db)\n    .await?;\n```\n\n## Schema first or Entity first? Your choice\n\nSeaORM provides a powerful migration system that lets you create tables, modify schemas, and seed data with ease.\n\nWith SeaORM 2.0, you also get a first-class [Entity First Workflow](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-10-30-sea-orm-2.0\u002F):\nsimply define new entities or add columns to existing ones,\nand SeaORM will automatically detect the changes and create the new tables, columns, unique keys, and foreign keys.\n\n```rust\n\u002F\u002F SeaORM resolves foreign key dependencies and creates the tables in topological order.\n\u002F\u002F Requires the `entity-registry` and `schema-sync` feature flags.\ndb.get_schema_registry(\"my_crate::entity::*\").sync(db).await;\n```\n\n## Ergonomic Raw SQL\n\nLet SeaORM handle 95% of your transactional queries.\nFor the remaining cases that are too complex to express,\nSeaORM still offers convenient support for writing raw SQL.\n```rust\nlet user = Item { name: \"Bob\" }; \u002F\u002F nested parameter access\nlet ids = [2, 3, 4]; \u002F\u002F expanded by the `..` operator\n\nlet user: Option\u003Cuser::Model> = user::Entity::find()\n    .from_raw_sql(raw_sql!(\n        Sqlite,\n        r#\"SELECT \"id\", \"name\" FROM \"user\"\n           WHERE \"name\" LIKE {user.name}\n           AND \"id\" in ({..ids})\n        \"#\n    ))\n    .one(db)\n    .await?;\n```\n\n## Synchronous Support\n\n[`sea-orm-sync`](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fsea-orm-sync) provides the full SeaORM API without requiring an async runtime, making it ideal for lightweight CLI programs with SQLite.\n\nSee the [quickstart example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fblob\u002Fmaster\u002Fsea-orm-sync\u002Fexamples\u002Fquickstart\u002Fsrc\u002Fmain.rs) for usage.\n\n## Basics\n\n### Select\nSeaORM models 1-N and M-N relationships at the Entity level,\nletting you traverse many-to-many links through a junction table in a single call.\n```rust\n\u002F\u002F find all models\nlet cakes: Vec\u003Ccake::Model> = Cake::find().all(db).await?;\n\n\u002F\u002F find and filter\nlet chocolate: Vec\u003Ccake::Model> = Cake::find()\n    .filter(Cake::COLUMN.name.contains(\"chocolate\"))\n    .all(db)\n    .await?;\n\n\u002F\u002F find one model\nlet cheese: Option\u003Ccake::Model> = Cake::find_by_id(1).one(db).await?;\nlet cheese: cake::Model = cheese.unwrap();\n\n\u002F\u002F find related models (lazy)\nlet fruit: Option\u003Cfruit::Model> = cheese.find_related(Fruit).one(db).await?;\n\n\u002F\u002F find related models (eager): for 1-1 relations\nlet cake_with_fruit: Vec\u003C(cake::Model, Option\u003Cfruit::Model>)> =\n    Cake::find().find_also_related(Fruit).all(db).await?;\n\n\u002F\u002F find related models (eager): works for both 1-N and M-N relations\nlet cake_with_fillings: Vec\u003C(cake::Model, Vec\u003Cfilling::Model>)> = Cake::find()\n    .find_with_related(Filling) \u002F\u002F for M-N relations, two joins are performed\n    .all(db) \u002F\u002F rows are automatically consolidated by left entity\n    .await?;\n```\n### Nested Select\n\nPartial models prevent overfetching by letting you querying only the fields\nyou need; it also makes writing deeply nested relational queries simple.\n```rust\nuse sea_orm::DerivePartialModel;\n\n#[derive(DerivePartialModel)]\n#[sea_orm(entity = \"cake::Entity\")]\nstruct CakeWithFruit {\n    id: i32,\n    name: String,\n    #[sea_orm(nested)]\n    fruit: Option\u003Cfruit::Model>, \u002F\u002F this can be a regular or another partial model\n}\n\nlet cakes: Vec\u003CCakeWithFruit> = Cake::find()\n    .left_join(fruit::Entity) \u002F\u002F no need to specify join condition\n    .into_partial_model() \u002F\u002F only the columns in the partial model will be selected\n    .all(db)\n    .await?;\n```\n\n### Insert\nSeaORM's ActiveModel lets you work directly with Rust data structures and\npersist them through a simple API.\nIt's easy to insert large batches of rows from different data sources.\n```rust\nlet apple = fruit::ActiveModel {\n    name: Set(\"Apple\".to_owned()),\n    ..Default::default() \u002F\u002F no need to set primary key\n};\n\nlet pear = fruit::ActiveModel {\n    name: Set(\"Pear\".to_owned()),\n    ..Default::default()\n};\n\n\u002F\u002F insert one: Active Record style\nlet apple = apple.insert(db).await?;\napple.id == 1;\n\n\u002F\u002F insert one: repository style\nlet result = Fruit::insert(apple).exec(db).await?;\nresult.last_insert_id == 1;\n\n\u002F\u002F insert many returning last insert id\nlet result = Fruit::insert_many([apple, pear]).exec(db).await?;\nresult.last_insert_id == Some(2);\n```\n\n### Insert (advanced)\nYou can take advantage of database specific features to perform upsert and idempotent insert.\n```rust\n\u002F\u002F insert many with returning (if supported by database)\nlet models: Vec\u003Cfruit::Model> = Fruit::insert_many([apple, pear])\n    .exec_with_returning(db)\n    .await?;\nmodels[0]\n    == fruit::Model {\n        id: 1, \u002F\u002F database assigned value\n        name: \"Apple\".to_owned(),\n        cake_id: None,\n    };\n\n\u002F\u002F insert with ON CONFLICT on primary key do nothing, with MySQL specific polyfill\nlet result = Fruit::insert_many([apple, pear])\n    .on_conflict_do_nothing()\n    .exec(db)\n    .await?;\n\nmatches!(result, TryInsertResult::Conflicted);\n```\n\n### Update\nActiveModel avoids race conditions by updating only the fields you've changed,\nnever overwriting untouched columns.\nYou can also craft complex bulk update queries with a fluent query building API.\n```rust\nuse sea_orm::sea_query::{Expr, Value};\n\nlet pear: Option\u003Cfruit::Model> = Fruit::find_by_id(1).one(db).await?;\nlet mut pear: fruit::ActiveModel = pear.unwrap().into();\n\npear.name = Set(\"Sweet pear\".to_owned()); \u002F\u002F update value of a single field\n\n\u002F\u002F update one: only changed columns will be updated\nlet pear: fruit::Model = pear.update(db).await?;\n\n\u002F\u002F update many: UPDATE \"fruit\" SET \"cake_id\" = \"cake_id\" + 2\n\u002F\u002F               WHERE \"fruit\".\"name\" LIKE '%Apple%'\nFruit::update_many()\n    .col_expr(fruit::COLUMN.cake_id, fruit::COLUMN.cake_id.add(2))\n    .filter(fruit::COLUMN.name.contains(\"Apple\"))\n    .exec(db)\n    .await?;\n```\n### Save\nYou can perform \"insert or update\" operation with ActiveModel, making it easy to compose transactional operations.\n```rust\nlet banana = fruit::ActiveModel {\n    id: NotSet,\n    name: Set(\"Banana\".to_owned()),\n    ..Default::default()\n};\n\n\u002F\u002F create, because primary key `id` is `NotSet`\nlet mut banana = banana.save(db).await?;\n\nbanana.id == Unchanged(2);\nbanana.name = Set(\"Banana Mongo\".to_owned());\n\n\u002F\u002F update, because primary key `id` is present\nlet banana = banana.save(db).await?;\n```\n### Delete\nThe same ActiveModel API consistent with insert and update.\n```rust\n\u002F\u002F delete one: Active Record style\nlet orange: Option\u003Cfruit::Model> = Fruit::find_by_id(1).one(db).await?;\nlet orange: fruit::Model = orange.unwrap();\norange.delete(db).await?;\n\n\u002F\u002F delete one: repository style\nlet orange = fruit::ActiveModel {\n    id: Set(2),\n    ..Default::default()\n};\nfruit::Entity::delete(orange).exec(db).await?;\n\n\u002F\u002F delete many: DELETE FROM \"fruit\" WHERE \"fruit\".\"name\" LIKE '%Orange%'\nfruit::Entity::delete_many()\n    .filter(fruit::COLUMN.name.contains(\"Orange\"))\n    .exec(db)\n    .await?;\n\n```\n### Raw SQL Query\nThe `raw_sql!` macro is like the `format!` macro but without the risk of SQL injection.\nIt supports nested parameter interpolation, array and tuple expansion, and even repeating group,\noffering great flexibility in crafting complex queries.\n\n```rust\n#[derive(FromQueryResult)]\nstruct CakeWithBakery {\n    name: String,\n    #[sea_orm(nested)]\n    bakery: Option\u003CBakery>,\n}\n\n#[derive(FromQueryResult)]\nstruct Bakery {\n    #[sea_orm(alias = \"bakery_name\")]\n    name: String,\n}\n\nlet cake_ids = [2, 3, 4]; \u002F\u002F expanded by the `..` operator\n\n\u002F\u002F can use many APIs with raw SQL, including nested select\nlet cake: Option\u003CCakeWithBakery> = CakeWithBakery::find_by_statement(raw_sql!(\n    Sqlite,\n    r#\"SELECT \"cake\".\"name\", \"bakery\".\"name\" AS \"bakery_name\"\n       FROM \"cake\"\n       LEFT JOIN \"bakery\" ON \"cake\".\"bakery_id\" = \"bakery\".\"id\"\n       WHERE \"cake\".\"id\" IN ({..cake_ids})\"#\n))\n.one(db)\n.await?;\n```\n\n## 🧭 Seaography: instant GraphQL API\n\n[Seaography](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fseaography) is a GraphQL framework built for SeaORM.\nSeaography allows you to build GraphQL resolvers quickly.\nWith just a few commands, you can launch a fullly-featured GraphQL server from SeaORM entities,\ncomplete with filter, pagination, relational queries and mutations!\n\nLook at the [Seaography Example](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002Fexamples\u002Fseaography_example) to learn more.\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FSeaQL\u002Fsea-orm\u002Fmaster\u002Fexamples\u002Fseaography_example\u002FSeaography%20example.png\"\u002F>\n\n## 🖥️ SeaORM Pro: Professional Admin Panel\n\n[SeaORM Pro](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm-pro\u002F) is an admin panel solution allowing you to quickly and easily launch an admin panel for your application - frontend development skills not required, but certainly nice to have!\n\nSeaORM Pro has been updated to support the latest features in SeaORM 2.0.\n\nFeatures:\n\n+ Full CRUD\n+ Built on React + GraphQL\n+ Built-in GraphQL resolver\n+ Customize the UI with TOML config\n+ Role Based Access Control *(new in 2.0)*\n\nRead the [Getting Started](https:\u002F\u002Fwww.sea-ql.org\u002Fsea-orm-pro\u002Fdocs\u002Finstall-and-config\u002Fgetting-started\u002F) guide to learn more.\n\n![](https:\u002F\u002Fraw.githubusercontent.com\u002FSeaQL\u002Fsea-orm\u002Frefs\u002Fheads\u002Fmaster\u002Fdocs\u002Fsea-orm-pro-dark.png#gh-dark-mode-only)\n![](https:\u002F\u002Fraw.githubusercontent.com\u002FSeaQL\u002Fsea-orm\u002Frefs\u002Fheads\u002Fmaster\u002Fdocs\u002Fsea-orm-pro-light.png#gh-light-mode-only)\n\n## SQL Server Support\n\n[SQL Server for SeaORM](https:\u002F\u002Fwww.sea-ql.org\u002FSeaORM-X\u002F) offers the same SeaORM API for MSSQL. We ported all test cases and examples, complemented by MSSQL specific documentation. If you are building enterprise software, you can [request commercial access](https:\u002F\u002Fforms.office.com\u002Fr\u002F1MuRPJmYBR). It is currently based on SeaORM 1.0, but we will offer free upgrade to existing users when SeaORM 2.0 is finalized.\n\n## Releases\n\nSeaORM 2.0 has reached its release candidate phase. We'd love for you to try it out and help shape the final release by [sharing your feedback](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fdiscussions\u002F).\n\n+ [Change Log](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Ftree\u002Fmaster\u002FCHANGELOG.md)\n\nSeaORM 2.0 is shaping up to be our most significant release yet - with a few breaking changes, plenty of enhancements, and a clear focus on developer experience.\n\n+ [A Sneak Peek at SeaORM 2.0](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-09-16-sea-orm-2.0\u002F)\n+ [SeaORM 2.0: A closer look](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-09-24-sea-orm-2.0\u002F)\n+ [Role Based Access Control in SeaORM 2.0](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-09-30-sea-orm-rbac\u002F)\n+ [Seaography 2.0: A Powerful and Extensible GraphQL Framework](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-10-08-seaography\u002F)\n+ [SeaORM 2.0: New Entity Format](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-10-20-sea-orm-2.0\u002F)\n+ [SeaORM 2.0: Entity First Workflow](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-10-30-sea-orm-2.0\u002F)\n+ [SeaORM 2.0: Strongly-Typed Column](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-11-11-sea-orm-2.0\u002F)\n+ [What's new in SeaORM Pro 2.0](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-11-21-whats-new-in-seaormpro-2.0\u002F)\n+ [SeaORM 2.0: Nested ActiveModel](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-11-25-sea-orm-2.0\u002F)\n+ [A walk-through of SeaORM 2.0](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-12-05-sea-orm-2.0\u002F)\n+ [How we made SeaORM synchronous](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-12-12-sea-orm-2.0\u002F)\n+ [SeaORM 2.0 Migration Guide](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2026-01-12-sea-orm-2.0\u002F)\n+ [SeaORM now supports Arrow & Parquet](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2026-02-22-sea-orm-arrow\u002F)\n+ [SeaORM 2.0 with SQL Server Support](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2026-02-25-sea-orm-x\u002F)\n\nIf you make extensive use of SeaQuery, we recommend checking out our blog post on SeaQuery 1.0 release:\n\n+ [The road to SeaQuery 1.0](https:\u002F\u002Fwww.sea-ql.org\u002Fblog\u002F2025-08-30-sea-query-1.0\u002F)\n\n## License\n\nLicensed under either of\n\n-   Apache License, Version 2.0\n    ([LICENSE-APACHE](LICENSE-APACHE) or \u003Chttp:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0>)\n-   MIT license\n    ([LICENSE-MIT](LICENSE-MIT) or \u003Chttp:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT>)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n\nWe invite you to participate, contribute and together help build Rust's future.\n\nA big shout out to our contributors!\n\n[![Contributors](https:\u002F\u002Fopencollective.com\u002Fsea-orm\u002Fcontributors.svg?width=1000&button=false)](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fgraphs\u002Fcontributors)\n\n## Who's using SeaORM?\n\nHere is a short list of awesome open source software built with SeaORM. Feel free to [submit yours](https:\u002F\u002Fgithub.com\u002FSeaQL\u002Fsea-orm\u002Fblob\u002Fmaster\u002FCOMMUNITY.md#built-with-seaorm)!\n\n| Project | GitHub | Tagline |\n|---------|--------|---------|\n| [Zed](https:\u002F\u002Fgithub.com\u002Fzed-industries\u002Fzed) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fzed-industries\u002Fzed.svg?style=social) | A high-performance, multiplayer code editor |\n| [Servo](https:\u002F\u002Fgithub.com\u002Fservo\u002Fservo) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fservo\u002Fservo.svg?style=social) | The Servo Parallel Browser Engine Project |\n| [OpenObserve](https:\u002F\u002Fgithub.com\u002Fopenobserve\u002Fopenobserve) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fopenobserve\u002Fopenobserve.svg?style=social) | Open-source observability platform |\n| [RisingWave](https:\u002F\u002Fgithub.com\u002Frisingwavelabs\u002Frisingwave) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Frisingwavelabs\u002Frisingwave.svg?style=social) | Stream processing and management platform |\n| [Warpgate](https:\u002F\u002Fgithub.com\u002Fwarp-tech\u002Fwarpgate) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fwarp-tech\u002Fwarpgate.svg?style=social) | Smart SSH bastion that works with any SSH client |\n| [LLDAP](https:\u002F\u002Fgithub.com\u002Fnitnelave\u002Flldap) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnitnelave\u002Flldap.svg?style=social) | A light LDAP server for user management |\n| [Svix](https:\u002F\u002Fgithub.com\u002Fsvix\u002Fsvix-webhooks) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fsvix\u002Fsvix-webhooks.svg?style=social) | The enterprise ready webhooks service |\n| [Ryot](https:\u002F\u002Fgithub.com\u002FIgnisDa\u002Fryot) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fignisda\u002Fryot.svg?style=social) | The only self hosted tracker you will ever need |\n| [OctoBase](https:\u002F\u002Fgithub.com\u002Ftoeverything\u002FOctoBase) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Ftoeverything\u002FOctoBase.svg?style=social) | A light-weight, scalable, offline collaborative data backend |\n| [System Initiative](https:\u002F\u002Fgithub.com\u002Fsysteminit\u002Fsi) | ![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fsysteminit\u002Fsi.svg?style=social) | DevOps Automation Platform |\n\n## Sponsorship\n\n[SeaQL.org](https:\u002F\u002Fwww.sea-ql.org\u002F) is an independent open-source organization run by passionate developers.\nIf you feel generous, a small donation via [GitHub Sponsor](https:\u002F\u002Fgithub.com\u002Fsponsors\u002FSeaQL) will be greatly appreciated, and goes a long way towards sustaining the organization.\n\n### Gold Sponsors\n\n\u003Ctable>\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fqdx.co\u002F\">\n  \u003Cimg src=\"https:\u002F\u002Fwww.sea-ql.org\u002Fstatic\u002Fsponsors\u002FQDX.svg\" width=\"138\"\u002F>\n\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\u003C\u002Ftable>\n\n[QDX](https:\u002F\u002Fqdx.co\u002F) pioneers quantum dynamics-powered drug discovery, leveraging AI and supercomputing to accelerate molecular modeling.\nWe're immensely grateful to QDX for sponsoring the development of SeaORM, the SQL toolkit that powers their data intensive applications.\n\n### Silver Sponsors\n\nWe're grateful to our silver sponsors: Digital Ocean, for sponsoring our servers. And JetBrains, for sponsoring our IDE.\n\n\u003Ctable>\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.digitalocean.com\u002F\">\n  \u003Cimg src=\"https:\u002F\u002Fwww.sea-ql.org\u002Fstatic\u002Fsponsors\u002FDigitalOcean.svg\" width=\"125\">\n\u003C\u002Fa>\u003C\u002Ftd>\n\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.jetbrains.com\u002F\">\n  \u003Cimg src=\"https:\u002F\u002Fwww.sea-ql.org\u002Fstatic\u002Fsponsors\u002FJetBrains.svg\" width=\"125\">\n\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\u003C\u002Ftable>\n\n## Mascot\n\nA friend of Ferris, Terres the hermit crab is the official mascot of SeaORM. His hobby is collecting shells.\n\n\u003Cimg alt=\"Terres\" src=\"https:\u002F\u002Fwww.sea-ql.org\u002FSeaORM\u002Fimg\u002FTerres.png\" width=\"400\"\u002F>\n\n## 🦀 Rustacean Sticker Pack\nThe Rustacean Sticker Pack is the perfect way to express your passion for Rust. Our stickers are made with a premium water-resistant vinyl with a unique matte finish.\n\nSticker Pack Contents:\n\n+ Logo of SeaQL projects: SeaQL, SeaORM, SeaQuery, Seaography\n+ Mascots: Ferris the Crab x 3, Terres the Hermit Crab\n+ The Rustacean wordmark\n\n[Support SeaQL and get a Sticker Pack!](https:\u002F\u002Fwww.sea-ql.org\u002Fsticker-pack\u002F) All proceeds contributes directly to the ongoing development of SeaQL projects.\n\n\u003Ca href=\"https:\u002F\u002Fwww.sea-ql.org\u002Fsticker-pack\u002F\">\u003Cimg alt=\"Rustacean Sticker Pack by SeaQL\" src=\"https:\u002F\u002Fwww.sea-ql.org\u002Fstatic\u002Fsticker-pack-1s.jpg\" width=\"600\"\u002F>\u003C\u002Fa>\n","SeaORM 是一个用于 Rust 语言的强大关系型对象映射库。它支持复杂的关系建模，包括 1-1、1-N、M-N 以及自引用关系，并提供了过滤、分页和嵌套查询等功能，加速 REST、GraphQL 和 gRPC API 的开发。SeaORM 受到 Ruby、Python 和 Node.js 生态系统中流行 ORM 的启发，为开发者提供了熟悉且易于上手的体验。适用于需要高性能和可靠性的 Web 服务构建场景，尤其适合那些已经在使用或计划使用 Rust 作为后端技术栈的项目。目前，该项目已被全球众多初创公司及企业采用，拥有超过 25 万次周下载量，证明了其在生产环境中的稳定性和可靠性。",2,"2026-06-11 03:03:45","top_language"]