V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tangmanger
V2EX  ›  数据库

你们平时手撸 SQL 多吗?还是 ORM 优先

  •  
  •   tangmanger · 1 天前 · 5250 次点击

    最近接手一个项目,里面有好多 SQL 语句,然后拿到 ORM 执行 SQL 字符串 话说,有 ORM 平时有什么场景需要手写 SQL 的

    61 条回复    2025-09-05 15:55:55 +08:00
    CoderGeek
        1
    CoderGeek  
       1 天前
    很少手写了 除非有那种框架搞不了的 手写还容易犯错
    Dorathea
        2
    Dorathea  
       1 天前
    "好多 SQL 语句,然后拿到 ORM 执行 SQL 字符串 "
    这啥意思, ORM 不就是为了不手动写 SQL 么 = =
    tangmanger
        3
    tangmanger  
    OP
       1 天前
    @Dorathea 比如 写个 sql= select * from AA _db.excute(sql)
    gam2046
        4
    gam2046  
       1 天前
    经常写,稍微复杂一点的多表查询,ORM 生成出来的只能说是能运行,但效率都不太好。

    除非是一些单表查询,生成出来的,一般都问题不大。
    Dorathea
        5
    Dorathea  
       1 天前   ❤️ 3
    说回正题吧, 我是[不用 ORM]( https://blog.codinghorror.com/object-relational-mapping-is-the-vietnam-of-computer-science/) 那一派的, 我觉得小项目不需要, 大项目谨慎使用
    yvyvyv
        6
    yvyvyv  
       1 天前
    crud 员一般都是 ORM ,写的快可读性好,交接起来也容易。
    连表查询有索引都是慢查询的时候,就用 sql 替代 ORM(因为我 ORM 理解的不够透,还是写 sql 优化容易一些)
    cccvno1
        7
    cccvno1  
       1 天前
    需要查一些老项目的表的时候,不是所有表设计的都是那么规范的,这时候直接写 sql 查完了再用 orm 将结果映射成对象更方便。
    我觉得 orm 的核心还是映射,能将返回结果映射成结构体就够了。
    可以看看 C#的 dapper ,写一些小项目或者运维小工具挺爽的。
    lbunderway
        8
    lbunderway  
       1 天前
    数据统计往往要 sql 才好写,orm 不容易实现,我们项目就是 sql 用的多
    WDATM33
        9
    WDATM33  
       1 天前
    看业务,比如写个报表 所有数据放业务层处理太复杂了, 还是直接 sql 一次性查出数据好处理点。
    pangdundun996
        10
    pangdundun996  
       1 天前
    复杂点的项目一般都是手写 sql 吧
    irisdev
        11
    irisdev  
       1 天前
    表结构复杂、数据量大还是写 sql ,人家几十年研发的引擎肯定比查完自己拼强
    lynnworld
        12
    lynnworld  
       1 天前
    写模板 SQL 然后生成代码
    canteon
        13
    canteon  
       1 天前
    一直都是手写 sql ,框架或者自己写一个语法糖,能预编译就行。orm 也用,偷懒的时候用 orm 。其实最主要的是因为 orm 还要去看文档,虽然每个框架思想大差不差,也能看懂。如果你要是维护那种老的项目,或者压根是一个不了解的框架,你就知道原生 sql 的方便处了。我现在就在看用 ruby 写的一个老项目,sql 天天有慢查询。全是用 orm 写的,找位置都挺费劲的
    zjsxwc
        14
    zjsxwc  
       1 天前
    看情况,2 着都用,都灵活使用,今天还在群里看到有人用这个 sql ,就是比用 ORM 方便
    bronyakaka
        15
    bronyakaka  
       1 天前
    复杂的 sql 都是自己写,orm 不仅丑,效率也不好
    i8086
        16
    i8086  
       1 天前
    单表 CRUD 都用,报表手写 SQL ,性能方向也是手写 SQL 。
    lujiaxing
        17
    lujiaxing  
       1 天前
    简单的东西直接 EFCore 出来就是了. 但是复杂的 (例如报表), 必须手写 SQL. 没办法.
    bf109_
        18
    bf109_  
    PRO
       1 天前
    用 ai 写啊
    Hieast
        19
    Hieast  
       1 天前
    crud 用 ORM ,报表手写
    betteron
        20
    betteron  
       1 天前
    自己的项目 || 不强制要求 orm = 直接手搓 sql
    其他的情况,orm,但是复杂的 sql 还得是 orm,即使项目大也是如此
    kk2syc
        21
    kk2syc  
       1 天前
    发版上线初期先用 orm 写,然后打点测,下一版的时候全部改成 sql ( orm 直接生成),然后手动处理性能问题的 sql 和优化慢查询
    Smileh
        22
    Smileh  
       1 天前
    我是基本上只用 ORM
    Smileh
        23
    Smileh  
       1 天前
    @Smileh #22
    前面说什么 orm 效率不好的,orm 不也是转 sql 吗
    有啥效率不好,只能说用的不熟
    KingHL
        24
    KingHL  
       1 天前
    orm 也有 SQL 优先类型的,想要简洁高效可以尝试换这种 orm 。
    zsc8917zsc
        25
    zsc8917zsc  
       1 天前
    曾经写了上万行存储过程练就了肌肉记忆....即便很多年不写了,再上手也是唯手熟尔。
    但是现在已经不写 sql 了,能用框架用框架,用不了框架~ All in AI
    loading
        26
    loading  
       1 天前 via Android
    基本手写,有时要对接其他数据库,直接手写方便快捷,你告诉我 ORM 怎么整,先不算定义吗?
    cobbage
        27
    cobbage  
       1 天前 via Android
    单表查询 orm 复杂的还得 sql 不然不好优化
    Shamiko
        28
    Shamiko  
       1 天前
    用 query builder ,简单查询用封装好的 api ,从来不手写 sql
    w3cll
        29
    w3cll  
       1 天前
    简单的 ORM ,复杂的就手搓,要不然不好优化
    linecode
        30
    linecode  
       1 天前
    都是 orm ,我看手写的还不如 orm 生成的 sql 好
    way2create
        31
    way2create  
       1 天前
    没必要手写的就不会手写
    bingfengfeifei
        32
    bingfengfeifei  
       1 天前   ❤️ 1
    golang 用 GORM+Gorm Gen ,之前用 sqlx 手撸的,有个大版本迁移到 GORM gen 上面了。效率提升了很多。
    只需要写建表 SQL ,然后自动生成结构体,CRUD 代码。
    幸亏迁移到这套框架上,最近有个需求是国产化信创数据库兼容,本来用的 MySQL ,现在要兼容人大金仓(PG),如果不用这套 ORM 的方式,估计要改死我。
    artiga033
        33
    artiga033  
       1 天前 via Android   ❤️ 2
    看语言生态。
    要是写 C#我都不知道怎么会有人能忍得住不用 EF Core+LINQ to SQL 的。
    Golang 的 ORM 基本都是残废,属于简单查询用 ORM ,复杂查询手写 SQL 的状态。
    现在用 rust 比较多,因为没有好用的 orm ,所以选择干脆不用 SQL 数据库,用 MongoDB 。
    DomenicCarter
        34
    DomenicCarter  
       1 天前
    .net 里我用的 efcore

    nodejs 里我用的是 drizzle orm (这个站就是 nextjs + drizzle orm 写的: http://gamocean.com/ )

    写 SQL 维护起来麻烦,尤其是换数据库时。
    changz
        35
    changz  
       1 天前 via Android
    没见过几个能把手写 sql 结合代码写得好的,手抖下还容易搞出各种安全问题
    esee
        36
    esee  
       1 天前
    @changz 注意 sql 注入, 禁止多行 sql 执行,就能避免 99%的问题了吧。或者你说的安全问题是指什么?
    dssxzuxc
        37
    dssxzuxc  
       23 小时 44 分钟前
    2025 年了,手写也不是真的纯一大串文本,有 sql build 框架能用,它们会负责底层的安全问题,真要论安全,手写比 orm 安全性更方便,因为更直观更容易检查出毛病。orm 在单表查询大于多表查询的项目里比较好,sql build 在多表以及复杂查询场景更好,也不能简单的分个强弱,如果某个框架能够做到完美地结合二者就好了。
    kk2syc
        38
    kk2syc  
       22 小时 13 分钟前
    @dssxzuxc 2025 年了,要培养一线产品对接、业务支撑、销售们手写 sql 了,反正有 ai 嘛 /滑稽
    yb2313
        39
    yb2313  
       21 小时 15 分钟前
    我最喜欢的就是手写一千行 sql 然后直接当做业务逻辑关键节点, 然后创建多个视图多层依赖, 并且不写任何文档, 桀桀桀
    cnbatch
        40
    cnbatch  
       20 小时 57 分钟前
    有如果有合规检查的话,那就一律用 ORM ,并且是合规认可的 ORM ,一旦出现 SQL 漏洞之类的,可以甩锅

    不需要合规检查,那就怎么简单怎么来,短语句手写,“长篇大论”式语句可以交给 ORM
    surbomfla
        41
    surbomfla  
       17 小时 58 分钟前
    直接使用 AI 判断,AI 觉得简单 ORM 能处理就使用 ORM ,不能的话 使用 SQL 语句,目前 几乎没有什么 SQL 语句 AI 处理不了的吧。
    shigella
        42
    shigella  
       17 小时 19 分钟前
    写 Dotnet 的时候用 ORM 比较多,写 Java 的时候就五五开更多时候愿意自己写 SQL ,自由度大
    LitterGopher
        43
    LitterGopher  
       17 小时 17 分钟前
    在代码上的体现肯定是 orm 優先,除非使用的 orm 沒有相關語句的語義化方法,不然都是使用 orm 。

    但是編碼過程還是先寫 sql ,在 dbeaver 裏面執行確定沒問題之後,然後把他轉化爲代碼裏面的 orm 。
    kakki
        44
    kakki  
       16 小时 55 分钟前
    除了 OLAP 很少很少直接写 SQL 低于 5%.
    totoro52
        45
    totoro52  
       16 小时 55 分钟前
    从不手写 sql ,都是查出来拼接,比 sql 好维护
    liuliuliuliu
        46
    liuliuliuliu  
    PRO
       16 小时 47 分钟前
    @artiga033 正解
    rlds
        47
    rlds  
       16 小时 31 分钟前
    用 orm 也就只是减少了一些基础查询的手写 sql ,要是一些复杂的业务统计还得自己手写 sql
    SoviaPhilo
        48
    SoviaPhilo  
       16 小时 24 分钟前
    用 native sql 的前提是这个项目不会因为外部原因, 比如合规化要求,需要做数据库迁移。

    迁一次就知道, 众多的语法糖和数据库方言有多恶心了
    Narcissu5
        49
    Narcissu5  
       16 小时 16 分钟前
    手写,因为 ORM 只能支持 SQL 很小一部分特性,比如 INERT INTO ... SELECT ,效率真的爆炸
    7gugu
        50
    7gugu  
       16 小时 2 分钟前
    手写+AI ,把表结构提供给 AI ,用自然语言描述一下就好了,质量好效率高
    bronyakaka
        51
    bronyakaka  
       15 小时 39 分钟前
    @Smileh #23 只能说你不懂 sql 优化
    cheng6563
        52
    cheng6563  
       15 小时 36 分钟前
    R 多手写,除非只是简单的 byId 条件就直接 ORM 。
    CUD 多 ORM ,除非要大批量处理。
    Smileh
        53
    Smileh  
       15 小时 32 分钟前
    @bronyakaka #51
    公司的 sql 80%都是我优化的,
    BI 大部分都是我写的
    数据统计需求基本上全我写的
    是你使用的 ORM 不熟练还是不支持
    导致你一直写原生 SQL ,
    Ethan212
        54
    Ethan212  
       14 小时 9 分钟前
    站巨人肩膀上,orm 就是用来摒弃屎山 sql 的。
    zhhqiang
        55
    zhhqiang  
       14 小时 5 分钟前
    orm 比较多,sql 感觉参数拼进去 可能会有其他问题。
    MaoRong
        56
    MaoRong  
       14 小时 4 分钟前
    看成你们平时手撸吗,,,
    0x663
        57
    0x663  
       14 小时 3 分钟前
    如果碰到需要兼容多种数据库(信创需求量大,各家信创数据库语法格式不一)的情况,ORM 会好切一些,sql 的话要写多份兼容。
    实时工作流开发的话用 sql 比较多写,数据入湖的 sql
    vipfts
        58
    vipfts  
       11 小时 6 分钟前
    @CoderGeek 戒撸了, 现在都让 ani 帮我
    worldgg
        59
    worldgg  
       10 小时 23 分钟前
    用 ORM ,因为不确定客户想要用什么数据库。方便兼容不同数据库。
    frank42a
        60
    frank42a  
       10 小时 20 分钟前
    SQL first
    hoosin
        61
    hoosin  
       10 小时 0 分钟前
    看情况,比如 ClickHouse 这种分析型数据库,SQL 写起来更直观
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1156 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:55 · PVG 01:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.