ORM for Qt
Is there any LGPL library for Qt? and is there any plan to make ORM available in Qt?
I found "QxOrm":http://www.qxorm.com/ but recently they changed their license to Proprietary license which conflicts with LGPL based software.
I found [url=https://code.google.com/p/d-quest/]DQuest[/url] but it seems still in earlies stages!
"Wikipedia":http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software provides a good reference as well.
I was searching for good LGPL or BSD license ORM framework, but haven't tested any of these and made the ORM work myself using the Qt's SQL models: QSqlQueryModel, ...
... but are paid.
If you test any of these, please share your impressions.
I tested QxOrm it works fine and easy to use so I consider it the perfect ORM framework for Qt the only problem with it is the license.
LiteSQL seems promising but it has major weak point which is XML database defining beside that it's not dealing with Qt library directly such as QxOrm.
QDjango is most candidate as a replacement to QxOrm because it built over Qt, supports LGPL and doesn't XML database definition, so this is the one I've to dig into it specially for performance tests... does any one share these tests with me?
I forgot to mention... I found [url=https://code.google.com/p/yb-orm/]yb-orm[/url] it has a major weak point which is can't deal with Postgresql, MySQL or Oracle drivers natively (it uses ODBC) which means weak performance by comparing to native drivers.
maybe my orm desision will be helpfull ;) https://github.com/victorzhuk/eorm
[quote author="victorzhuk" date="1368309226"]maybe my orm desision will be healfull ;) https://github.com/victorzhuk/eorm[/quote]
- Is there any example or demo using it?
- Does the performance is quick as Qt's model or it's a slower a little bit (I'm not sure what if I used the loops instead of Qt's model the performance will be same as Qt)?
- examples are placed in documentation, use Doxygen to compose html docs. I can help if you don`t know how
- I think yes, but I don`t have chance to check this - I create this lib for personal use, and if you have any test results and ideas I can impove it :)
ps: sory for my english :)
[quote author="victorzhuk" date="1368310323"]examples are placed in documentation, use Doxygen to compose html docs. I can help if you don`t know how[/quote]
Oops I don't want to build the project manually... I just ask you for tiny example :)
[quote]I think yes, but I don`t have chance to check this - I create this lib for personal use, and if you have any test results and ideas I can impove it :)[/quote]
Do you mean it's slower? or it has same Qt performance?
if you need litle demo I can quick create it for you ;)
bq. Do you mean it’s slower? or it has same Qt performance?
library use only qt`s mechanisms, no boost or custom macros...and when I use it performance was the same
it`s will be great if my lib help anybody. wait for a sec, I post demo
[quote author="victorzhuk" date="1368314480"]http://rapidshare.com/files/549905365/EOrmDemo.tar.gz please[/quote]
It's not working!!! use another sharing website please (try one.ubuntu.com)
The download for this file has not been enabled. Only the user who uploaded it, can enable the download option.
here it is http://ubuntuone.com/5wimYZQnJJlcQCBo5pDpS6
For demo success working you should compile EOrm and add .so(.dll) and *.h files to EOrmDemo project (just replace paths in *.pro file)
[quote author="victorzhuk" date="1368314994"]here it is http://ubuntuone.com/5wimYZQnJJlcQCBo5pDpS6[/quote]
Thanks, I successfully run the example :) it's quite easy to understand... I think eorm's performance should be as Qt's model.
Any way, I've to test it in heavy and excessive usage then compare it with the above libraries in addition to Qt standard model, this may take some time because I'm busy these days.
Do you want to share with me these tests?
I want to test:
- Standard Qt model
until that date, could you please add some exmpales to your Git repository instead of this quick example?
sure :) how can I help you? what tests?
[quote author="victorzhuk" date="1368317045"]sure :) how can I help you? what tests?[/quote]
I'm planning to apply some complicated queries with millions of records on stable database server (ex. MySQL or Postgresql)
s try :) about examples - I find a time and upload some in git, with find,model,create,delete etc.. hope its help somebody
[quote author="victorzhuk" date="1368317891"]let
s try :) about examples - I find a time and upload some in git, with find,model,create,delete etc.. hope its help somebody[/quote]
Thanks... this will ease comparing process.
Guys, I found this library which may works too. I'll add it for performance comparison.
Until now I'm planning to test:
- eorm: https://github.com/victorzhuk/eorm
- QDjango: https://code.google.com/p/qdjango/
- QsT SQL Tools: https://sourceforge.net/projects/qstsqltools/?source=directory
- QtPersistence: https://sourceforge.net/projects/qtpersistence/?source=directory
- Standard Qt model
I'm still looking for others...
I wonder how your testing is going on. I am facing a similar problem, and I am undecided between ODB, QxOrm, and QDjango. For me, licensing is less of an issue, but performance and features are.
The Best performance was for QDjango, QxOrm and Standard Qt model. All three techniques gave same result in many cases but QxOrm is the best from features prespactive while QDjango is the best from simplicity and rapid usage.
Personally I use QDjango because it fits my needs while I left QxOrm becasue of license issue (actually it's heavy by comparing to QDjango)
I am leaning towards QDjango as well, but there are still a few questions left, one of which is about relationships. QxOrm supports them, but I guess I have to implement it myself with QDjango. Do you have experience maintaing relationships with QDjango?
Also, I noticed that QDjango uses API deprecated in Qt5 (I had to specifically enable it to build the lib). Does this bother you at all?
[quote author="Skh1002" date="1373580970"]I am leaning towards QDjango as well, but there are still a few questions left, one of which is about relationships. QxOrm supports them, but I guess I have to implement it myself with QDjango. Do you have experience maintaing relationships with QDjango? [/quote]
I'm just like you I'm still working on it and I don't know how to connect to relationships with QDjango
bq. Also, I noticed that QDjango uses API deprecated in Qt5 (I had to specifically enable it to build the lib). Does this bother you at all?
Which version you're using? I use 0.4 which works in Qt5
P.S. for more info you can join to "QDjango mailing list":http://groups.google.com/group/qdjango
I have the same version as you, but in Qt5.1 (with which I compiled it) some of the now deprecated API QDjango uses are removed by default. I don't know in which version of Qt this started. I had to insert something like
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x040800
somewhere in qdjango.pri to compile it properly.
Me too, but that didn't stops me to use it because it suppose to work for Qt4 and Qt5.
I have just looked into the test suite bundled with QDjango and there are cases for one-to-many and many-to-many relationships. So, apparently, there is support of such relationships. I will give it a spin to see how convenient it is compared to pure Qt.
It appears that there is no relationship support in QDjango, after all. You can only emulate relationships with query sets on foreign keys. Further on, to create a many-to-many relationship between two entities, one must create a third one (equivalent to a separate foreign key table) and then filter query sets based upon that third entity. That's all very much doable, but basically amounts to hand-coding all of relationship management.
QxOrm does provide relationship support, so it may be more convenient to use if you need to maintain many relationships and/or fiddle with them a lot. I think I am still going to try QDjango first and fall back on QxOrm if it does not work out.
Please, let me know of your experience with QDjango. I will post my impressions after I play with it.
I'm the developer of QxOrm library.
FYI, we have released QxEntityEditor to make easier to work with QxOrm library : now, you can design your data model in few minutes and generate quickly a Qt/C++ project (and the SQL database associated).
More details here : "http://qt-project.org/forums/viewthread/35932/":http://qt-project.org/forums/viewthread/35932/
After years of this post, Qt still without a practical open source ORM :(
The only reliable option is QxOrm which is useless without QxEntityEditor because it's complicated without it but QxEntityEditor is commercial product so I'm still using the old way with Qt.
If anyone is still interested, ORM-Qt is on a MIT license.
Here are my five bucks:
(it's in PyQt)