Help deciding ORM VS raw SQL trade-off in Complex scenario

167 views
Skip to first unread message

Krishnakant Mane

unread,
Jul 13, 2024, 11:16:00 PMJul 13
to django...@googlegroups.com
Hello.

I am seasoned SQLAlchemy user and quite good in node's sequelise ORM.

But I am new to the one with Django.So here's my situation.

I am developing an accounting (book keeping ) automation software service.

So there are accounting rules (Debit = Dr and credit = Cr) for double
entry book keeping.

Every transaction will have 2 or more amounts, at least 1 each for dr or
Cr.

These entries are called vouchers.

We also store retail bills, receipts and payments again all in different
tables.

But the bills and receipt&payment tables are connected to the voucher
table.

The software generates reports such as cash flow, meaning day's opening
balance, total Drs, total crs, and final closing balance (DRs - Crs).

then there are Profit and Loss as well as balance sheet reports.

All this needs a lot of aggregations (sum and counts ) and also joining
of invoice + voucher and recept&payment + voucher tables.

so here are my questions.

1: given the fact that I have created materialised views in Postgresql,
should I even care to model them and use the ORM syntax instead of raw
query?  What would perform better?

2: datasets are going to be huge some times in terms of shear rows (all
transactions aka vouchers ) or some times sum and count will be used in
complex queries on a huge dataset.

Again, should I rely on raw queries or will ORM plan the queries for me
better?  Should I instead create stored procedures and call them from my
REST API?

talking of which,

3: I am using Django REST Framework and serialising records is an option
to get json output.

Should I use it or just go with raw queries and convert output to JSON
as required?

Again performance is a question.

Tip, My team is very proficient in SQL and yours truely can modestly
call himself an expert in the same, so maintenance is not an issue here.

Regards.

Krishnakant.

Enock Deghost

unread,
Jul 14, 2024, 12:35:30 AMJul 14
to django...@googlegroups.com

🙄


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/097a6e55-c30e-491e-bf43-86e4c672faa4%40gmail.com.

eric paul

unread,
Jul 14, 2024, 3:03:38 AMJul 14
to django...@googlegroups.com

In whatever way possible use the Django ORM for security purposes and also efficiency . I won't recommend to use Raw queries if you don't know what you are doing


Sam Brown

unread,
Jul 14, 2024, 12:06:37 PMJul 14
to django...@googlegroups.com
Im sure there are performance metrics out there to prove the ORM will not be the bottleneck. But I’ve never seen it slow things down when I’ve employed a timer on operation

Also, ive recently ran into some of the limitations of drf and am looking into moving to an api that can be less coupled with orm. Django-ninja looks promising. 

Gulshan Yadav

unread,
Jul 14, 2024, 12:16:26 PMJul 14
to django...@googlegroups.com

If you use ORM QUERY THEN IT IS VERY EASY TO SOLVE THIS ONE BY USING FOREIGN KEY OR MANY TO MANY RELATIONSHIP AND WHEN IF USER NOT RAGISTER THEN WE NEED TO ADD NON RAGISTER USER UNIQUE KEY FOR IDENTIFICATION AND AMOUNT WHICH ONE TAKE RECIEVE THE MONEY STORED IDENTIFICATION KEY  IN PAYMENT TABLE AND CONNECT MORE TABLE


Krishnakant Mane

unread,
Jul 14, 2024, 1:29:25 PMJul 14
to django...@googlegroups.com, Sam Brown

I am looking into ninja too.

I guess I may be able to use SQLAlchemy seamlessly with it.

Regards.

Singhal._.paras

unread,
Jul 14, 2024, 1:44:24 PMJul 14
to django...@googlegroups.com
Bro ,
Just go for it !

Krishnakant Mane

unread,
Jul 14, 2024, 1:49:34 PMJul 14
to django...@googlegroups.com, eric paul

Hi Eric.

Can you explain a bit more on the "performance " aspect you refered to?

I have already mentioned my scenario and given the case study which I am working on.

In that reference, how using the ORM will benefit more than raw queries working with materialised views?

Regarding security, I (and the team working on this ) are totally aware of the pitfalls and the way around them so that's out of the way.

Regards.

eric paul

unread,
Jul 14, 2024, 2:25:29 PMJul 14
to Krishnakant Mane, django...@googlegroups.com

According to your scenario an accounting system is a more complex system that requires high performance. It can be written in any language but as the system grows some programming languages will experience performance issues python being one of them take a case like Dropbox which was originally written in python but because of python speeds and data handling limitations it led the team to introduce other languages (Go, Rust) . Since you've decided to go with Django then it's best you use raw queries and concurrency etc inorder to achieve high performance.It also comes down to your hardware and code practices . Take a look at the Django ledger repo an accounting system. About the API you can explore Graphql.

ReynardSec

unread,
Jul 14, 2024, 8:07:55 PMJul 14
to Django users
Hello,

On Sunday 14 July 2024 at 09:03:38 UTC+2 eric paul wrote:

In whatever way possible use the Django ORM for security purposes and also efficiency .

Offtopic: There are certain issues worth keeping in mind, even if you are using an ORM: https://www.elttam.com/blog/plormbing-your-django-orm/

Cheers,
ReynardSec

Krishnakant Mane

unread,
Jul 27, 2024, 4:45:09 AMJul 27
to django...@googlegroups.com, Sam Brown

Talking about Ninja.

I am actually trying to figure out how I can distribute my crud APIs in seperate python modules (one per model ) and make a package in my app.

Then How all the routs can be imported in the project urls.py at once.

Any suggestions?

Regards.

On 7/14/24 21:35, Sam Brown wrote:
Reply all
Reply to author
Forward
0 new messages