Giter VIP home page Giter VIP logo

xorm's People

Contributors

admpub avatar appleboy avatar betacat0 avatar betazk avatar cnphpbb avatar dlob avatar drwrong avatar evalphobia avatar extrame avatar fuxiaohei avatar gavv avatar gzsombor avatar hilyjiang avatar insionng avatar jamesmura avatar kaneshin avatar lunny avatar mzmuer avatar nashtsai avatar nemec784 avatar oinume avatar slory7 avatar starchou avatar tossp avatar unphp avatar winxxp avatar woodsaj avatar wuxunliang avatar yyoshiki41 avatar zileyuan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xorm's Issues

xorm transfer

xorm命令行工具支持从一个数据库将数据导入到另一个数据库。

加入低层API

简单而高效的database/sql封装,既可以单独使用,同时作为xorm的底层依赖

自定义主键Id()的调用

在表未定义主键之前这个代码是会通过id去更新数据的
eft, err := db.Id(id).Update(a)

在自定义主键后表结构如下
type Article struct {
Id int32 pk INT autoincr
Name string xorm:"VARCHAR(45)"
Img string xorm:"VARCHAR(100)"
Aside string XORM:"VARCHAR(200)"
Desc string XORM:"VARCHAR(200)"
Content string XORM:"TEXT"
Status int8 xorm:"TINYINT(4)"
}

eft, err := db.Id(id).Update(a)中Id(id)是无效的

Engine.Delete方法bug

Engine.Delete方法当条件为全部时无法删除,环境是pgsql9.2 ,其他环境没测.

In操作mysql数据库问题

Engine.In("id", "2,3,4,5,6,7,8").Find(&menus)

这样的操作只会返回 id=2的这一条数据,,并不会返回所有的

Cache improvements

1.composite primary key support
2.redis cache provider support
3.Cascade support

Uniform database open params

在保持向前兼容性的同时,修改现有NewEngine接口,允许只提供一个参数。这个参数规则由xorm来制定(可参考sqlchamy),并转换成对应驱动的参数。

建议增加函数式定义表特殊连击神技..

Define(table).PK("id").Col("college1","student1","college2","student2").Type("string").Col("old").Type("int64")

Define(table).PK(id).Str(colLen,f1,f2,f3).Int(colLen, f5, f6).Index(f1, f2).UI(f3,f2)

sqlite3 index problem

One of my struct attribute is "Group", and when it create index with group, it will run "CREATE INDEX xxx_group ON xxx (group);", the sqlite3 db report error.

Engine.Update方法有BUG!

thisid, err := Engine.Update(nd, &Node{Id: nid})
thisid的值始终返回1,正确应该返回被更新的字段id.希望尽快修复!

Custom types can not be used in mapped structs

The problem is, that you can't map struct field with type, defined as "alias". If you'll try to run this sample:

import (
    "github.com/lunny/xorm"
    _ "github.com/mattn/go-sqlite3"
)

type MyInt int

type MyStruct struct {
   Type MyInt
   Name string
}

func main() {
   orm, err = xorm.NewEngine("sqlite3", "./int.db")
   orm.CreateTables(&MyStruct{})
   i := MyStruct{Name: "Test", Type: MyInt(1)}
   orm.Insert(&i)
   orm.Get(&i)
}

you'll get reflect panic on Engine.Get call:
panic: reflect.Set: value of type int is not assignable to type MyInt
Same problem with Find.

Problem seems to raise from this line. I guess, that you should call Value.SetInt if kind is reflect.Int and the same for other simple kinds.

在非编译状态下运行会出现错误,是什么原因造成的?

if err := Engine.Sync(new(User), new(Category), new(Node), new(Topic), new(Reply), new(Kvs), new(File)); err != nil {
    fmt.Println("Database struct sync failed")
    fmt.Println("Engine.Sync ERRORS:", err)

通过go run 运行时:
go run app.go
Starting...
Database struct sync failed
Engine.Sync ERRORS: unable to open database file

sync问题

对model增加一个列,然后sync后,这个列会在数据库中被创建。
问题是:
如果我手动对表增加了一列(这个列增加的是正确的),我做sync,会报错说"duplicate column name:"

如何解决?

新手请教:刚更新了0.3.1版本,以前正常的程序现在运行期间报错了

刚更新了0.3.1版本,以前是0.2.3,以前正常的程序现在运行期间报错了,写了一个最简单的测试程序也报同样的错误,大家有遇到过吗?请指教,多谢。

最简代码:

type User struct {
    Id       int32
    UserName string
}

func main() {
  var db *xorm.Engine
  var err error
  db, err = xorm.NewEngine("mysql", fmt.Sprintf("%v:%v@tcp(%v:3306)/%v?charset=utf8",dbUser, dbPwd, dbhost, dbName))
  if err != nil {
        fmt.Println(err)
        return
  }
  info := User{}
  _, err = db.Id(1).Get(&info)
  if err != nil {
        fmt.Println(err)
        return
  }
}

运行后报的错误为:

SELECT `User`.`Id`, `User`.`UserName`, `User`.`FullName`, `User`.`Created` FROM `User` WHERE Id=? LIMIT 1
[1]
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x486584]

goroutine 1 [running]:
github.com/lunny/xorm.(*Session).bytes2Value(0xc0800b3000, 0x0, 0xc0800b7300, 0xc080000350, 0x8, ...)
    E:/testGo/src/github.com/lunny/xorm/session.go:1966 +0x124
github.com/lunny/xorm.(*Session).row2Bean(0xc0800b3000, 0xc08007d6c0, 0xc0800b8080, 0x4, 0x4, ...)
    E:/testGo/src/github.com/lunny/xorm/session.go:1637 +0x987
github.com/lunny/xorm.(*Session).Get(0xc0800b3000, 0x5d6920, 0xc08007e7c0, 0xc0800b3000, 0x0, ...)
    E:/testGo/src/github.com/lunny/xorm/session.go:922 +0x4e2
main.main()
    E:/testGo/src/sampleTest/main.go:58 +0x158

goroutine 3 [syscall]:
syscall.Syscall6(0x7746bbc0, 0x5, 0x9c, 0xc08007af00, 0xc080000250, ...)
    C:/Users/ADMINI~1/AppData/Local/Temp/2/bindist417694871/go/src/pkg/runtime/zsyscall_windows_windows_amd64.c:97 +0x55
syscall.GetQueuedCompletionStatus(0x9c, 0xc08007af00, 0xc080000250, 0xc080000248, 0xffffffff, ...)
    C:/Users/ADMINI~1/AppData/Local/Temp/2/bindist417694871/go/src/pkg/syscall/zsyscall_windows_amd64.go:507 +0x9f
net.(*resultSrv).Run(0xc080000240)
    C:/Users/ADMINI~1/AppData/Local/Temp/2/bindist417694871/go/src/pkg/net/fd_windows.go:150 +0x151
created by net.startServer
    C:/Users/ADMINI~1/AppData/Local/Temp/2/bindist417694871/go/src/pkg/net/fd_windows.go:285 +0x10f
错误: 进程退出代码 2.

数据库:mysql 5.1.63
编译环境:windows 7 64位
GO版本:1.1.2

建议增加一个全局时间切换的开关,UTC时间 local时间

目前各种orm对数据的处理都不规范,没有统一的规定究竟是utc时间为准,还是local时间为准,建议xorm里增加一个时间开关,可以设定究竟当前orm内部时间转换以何种为准.

这样的话,用户就可以根据需求自己自行选择.而不至于每次预期读出的是某时间,发觉实际上却是相差了7 8个小时,还得自己手工减减加加处理一番~

NewSimpleConnectPool 关闭异常

测试代码如下:
package main
import _ "github.com/go-sql-driver/mysql"
import "github.com/lunny/xorm"
import "fmt"
const(
dburl="root:123456@tcp(127.0.0.1:3306)/test"
dbdriver="mysql"
)

func main() {
engine,err:= xorm.NewEngine(dbdriver,dburl)
engine.SetPool(xorm.NewSimpleConnectPool())
if err!=nil {
fmt.Println(err)
}
engine.Close()
}

如果去掉
engine.SetPool(xorm.NewSimpleConnectPool())
关闭是没问题的。
运行异常如下:
database/sql.(_DB).Close(0x0, 0xc210036720, 0x0)
/usr/local/go/src/pkg/database/sql/sql.go:456 +0x46f
github.com/lunny/xorm.(_SimpleConnectPool).Close(0xc21004d180, 0xc210037d00, 0x0, 0x0)
/Users/pyc/golearn/go.demos/src/xorm.demos/src/github.com/lunny/xorm/pool.go:264 +0x97
github.com/lunny/xorm.(*Engine).Close(0xc210037d00, 0x659358, 0xc21004d180)
/Users/pyc/golearn/go.demos/src/xorm.demos/src/github.com/lunny/xorm/engine.go:175 +0x38
main.main()
/Users/pyc/golearn/go.demos/src/xorm.demos/test.go:16 +0x208

goroutine 3 [runnable]:
database/sql.(*DB).connectionOpener(0xc210051180)
/usr/local/go/src/pkg/database/sql/sql.go:573
created by database/sql.Open
/usr/local/go/src/pkg/database/sql/sql.go:436 +0x24d

文档链接更新

README_CN.md里面的快速开始链接失效,应该链接到docs/QuickStart.md.

建议增加 每个映射表struct 里面的 Created 跟 Updated 字段 在插入 修改的时候 自动写入到数据库中

建议增加 每个映射表struct 里面的 Created 跟 Updated 字段 在插入 修改的时候 自动写入到数据库中

如 实例中:

// add Begin() before any action
err := session.Begin()  
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
_, err = session.Insert(&user1)
if err != nil {
    session.Rollback()
    return
}

免去 其中

Created: time.Now()

就很不错了

增加XORM命令行自动化工具

XORM命令行自动化工具(或web或gui,不过命令行相对通用一些):

命令行从数据库获取,从数据库生成Struct.自动生成模型.

可以自动生成 struct,再复制到程序里使用.

一个表一个文件,这样可以自由选取调用

生成路径的话自己指定吧,如果输入了路径,包名就是最后一层目录名,如果没有输入路径,就新建models目录,包名就models吧.

默认根据读取的数据库表名来定,struct名也可以指定.

内容像这样:
package models

import (

"time"

)

type C struct {
A string
B time.Time
}

命令行在加个参数-json,如果有这个参数生成的struct里就加上json:"id"之类

sqlite3 index recreate error

when I set a struct attribute xorm:index, the index will create every time my programme start, and it will be error after the first created.

Host is not allowed to connect to this MySQL server时,xorm没有任何提示就退出

os:win7;mysql 5.6;驱动(Go-SQL-Driver/MySQL),xorm均为最新版

今天是第一次开始使用xorm,mysql.dns是"root:123456@tcp(192.168.2.39:3306)/test?charset=utf8",xorm.NewEngine()没有提示错误,代码一运行到engine.Ping()或engine.Sycn()时,程序会没有任何提示就退出.

查了老半天代码没发现问题,最后换自己用"database/sql"创建DB连接时才发现是"192.168.2.39"这个本机ip导致不能连接mysql而引起xorm退出,换"127.0.0.1"就好了.

希望有一个方法可以提示创建的Orm引擎是否可用,而不是调用时没有提示就导致程序退出.

ORM Cascading Proposal

Proposal:

  • new xorm tags for has_one, belongs_to, and has_many relationships
  • new Engine APIs for lazy fetch
  • new xorm tags for specifying eager or lazy fetch, 'lazy', 'eager', 'eager_select'
  • default fetch for has_one is eagerly fetched via join query, can override the default behavior conjunction of 'lazy' tag presence
  • default fetch for has_many is lazy, can override the default behavior with conjunction of 'eager' or 'eager_select' tag, using 'eager' will result join query for fetching has many datas
  • belongs_to is coupled usage with has_many, and default eager fetch

Cant save floats

Trying to save a float64/32 struct field to a MySQL DB always saves a zero-value to db

增加自动读写分离

同时连接两个数据库,建议支持不同类型数据库间主从\双主等方式,如果我读选了sqlite,写选了pgsql,希望这样也可以.

主的允许读写,从的只允许读等等..
可以提高性能,ORM内部自动切换..

how to change database?

1.how to change database? but not new engine.
example for:
engine, err := xorm.NewEngine("mysql", "root:@tcp(localhost:3306)/?charset=utf8")
....("USE xx_db") ???

2.i wish add struct tag for table name
var g Group
session.Table("pp_group").Where("id = ?", 8).Get(&g)

3.感觉你这个设计很凌乱。

thanks.

建议增加对版本version的支持

update的时候,会自动检测version并且version+1。delete可以不做任何处理的,其次是更新时也把version作为条件,如:
update table set field =[value], fieldversion = fieldversion +1 where id = [id] and fieldversion = [version]

这个只是对单独记录更新,批量更新时有两种情况,
1是不使用版本了,如:
update table set field =[value], fieldversion = fieldversion +1 where field=[fieldvalue]
2是使用版本,这需要可以考虑逐条记录生成sql并执行,如:
update table set field =[value], fieldversion = fieldversion +1 where id = [id] and fieldversion = [version]
update table set field =[value], fieldversion = fieldversion +1 where id = [id] and fieldversion = [version]

建议增加类似qbs的Iterate方法

[杭州]无闻 8:25:14
http://gowalker.org/github.com/coocood/qbs#Qbs_Iterate
[杭州]无闻 8:25:29
xorm有没有这种方法
[杭州]无闻 8:25:35
一次一个读取
[杭州]无闻 8:25:42
不是一次性全部读入内存
无闻说的这个有么?
正雄 21:09:11
Iterate the rows, the first parameter is a struct pointer, the second parameter is a fucntion which will get called on each row, the in do function the structPtr's value will be set to the current row's value.. if do function returns an error, the iteration will be stopped.

读一行 即时调用函数处理 继续一行

现在一个表有万多条记录 想有个类似游标的方法来读数据

http://gowalker.org/github.com/coocood/qbs#Qbs_Iterate

xorm dump

xorm命令行支持从数据库生成SQL文件,包括结构和数据。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.