{"repo":"issue9/orm","free":true,"listed":false,"github":"https://github.com/issue9/orm","clone":"git clone https://github.com/issue9/orm.git","description":"简单小巧的 orm","language":"Go","stars":12,"topics":["go","golang","orm","database","orm-library","object-relational-mapper"],"license":"MIT","category":"databases-storage","readme_excerpt":"orm ====== 目前内置了对以下数据库的支持： 数据库 驱动 状态 ---------- -------------------------------------- ------------ mysql mysql github.com/go-sql-driver/mysql mariadb mysql github.com/go-sql-driver/mysql sqlite3 sqlite3 github.com/mattn/go-sqlite3 sqlite3 sqlite modernc.org/sqlite postgres postgres github.com/lib/pq 理论上 也是可用于 postgres，不过其驱动的注册名称为 pgx。 sqlite 为纯 Go 代码编写，如果涉及到交叉编译的可以采用此驱动，会很方便。 其它数据库，用户可以通过实现 Dialect 接口，来实现相应的支持。 如果用到了 check 约束，则需要 mysql 8.0.19、mariadb 10.2.1， mysql 的 MyISAM 是不支持外键约束的。 初始化 默认情况下，orm 包并不会加载任何数据库的实例。所以想要用哪个数据库，需要手动初始化： 占位符 SQL 语句可以使用 {} 包含一个关键字，使其它成为普通列名，如： 在实际执行时，相关的占位符就会被替换成与当前环境想容的实例， 如在数据库为 mysql 时，会被替换成以下语句，然后再执行： DB.Query(),DB.Exec(),DB.Prepare().DB.Where() 及 Tx 与之对应的函数都可以使用占位符。 Model 不能指定占位符，它们默认总会使用占位符，且无法取消。 Model: orm 包通过 struct tag 来描述 model 在数据库中的结构。大概格式如下： 目前支持以下的 struct tag： name(fieldName): 指定当前字段在数据表中的名称，如果未指定，则和字段名相同。 只有可导出的字段才有效果。 len(l1, l2): 指定字段的长度。比如 mysql 中的int(5),varchar(255),double(1,2), 不支持该特性的数据，将会忽略该标签的内容，比如 sqlite3。 NOTE:字符串类型必须指定长度，若长度过大或是将长度设置了-1， 想使用类似于 TEXT 等不定长的形式表达。 如果是日期类型，则第一个可选参数表示日期精度。 nullable(true false): 相当于定义表结构时的 NULL。 pk: 主键，支持联合主键，给多个字段加上 pk 的 struct tag 即可。 ai: 自增，若指定了自增列，则将自动取消其它的 pk 设置。无法指定起始值和步长。 可手动设置一个非零值来更改某条数据的 AI 行为。 unique(index name): 唯一索引，支持联合索引，index name 为约束名，会将 index name 为一样的字段定义为一个联合索引。 在联合索引中，零值会被当作空值处理，当零值是一个有效的值时，应当使用 sql.NullInt 等类型替换 int 类型。 index(index name): 普通的关键字索引，同 unique 一样会将名称相同的索引定义为一个联合索引。 occ(true false) 当前列作为乐观锁字段。 作为乐观锁的字段，其值表示的是线上数据的值，在更新时，会自动给线上的值加 1。 default(value): 指定默认值。相当于定义表结","default_branch":null,"files":null,"tree":[],"storefront":"/r/issue9","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/issue9/orm/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}