পাইথন ওআরএম এর কয়েকটি ভাল সমাধান কী? [বন্ধ]


209

আমি মূল্যায়ন করছি এবং চেরিপি ব্যবহার করে এমন একটি প্রকল্পের জন্য যা মূলত ক্লায়েন্ট-সাইড (ব্রাউজার) থেকে জাভাস্ক্রিপ্টের ফ্রন্ট-এন্ড যা ব্যাক-এন্ডে পাইথন ওয়েব সার্ভিসে কথা বলে। সুতরাং, আমার সত্যিই ব্যাক-এন্ডে দ্রুত এবং লাইটওয়েটের এমন কিছু দরকার যা আমি পাইথন ব্যবহার করে প্রয়োগ করতে পারি যা তারপরে একটি ওআরএম (ব্রাউজারে জেএসএন) এর মাধ্যমে পোস্টগ্রেএসকিউএল ডিবিতে কথা বলে।

আমি জ্যাঙ্গোর দিকেও নজর দিচ্ছি, যা আমার পছন্দ, কারণ এর ওআরএম অন্তর্নির্মিত। যাইহোক, আমি মনে করি জ্যাঙ্গো আমার প্রয়োজনের তুলনায় কিছুটা বেশি হতে পারে (অর্থাত্ আমার যা প্রয়োজন তার চেয়ে আরও বেশি বৈশিষ্ট্য == ধীর?)।

যে কারও কাছে পৃথক পাইথন ওআরএম সমাধানগুলির সাথে কোনও অভিজ্ঞতা রয়েছে যা তাদের বৈশিষ্ট্য এবং কার্যকারিতা, গতি, দক্ষতা ইত্যাদি তুলনা করে এবং এর বিপরীতে করতে পারে?


পনিওআরএম দেখতে খুব সুন্দর লাগছে
নিক্লাস আর

অবজেক্ট-রিলেশনাল ম্যাপিং (ওআরএম) ইতিমধ্যে অনেক প্রোগ্রামিং ভাষায় খুব জনপ্রিয় এবং এসকিউএল এর অন্যতম সেরা বিকল্প। আমি আমার টিআরআইডিবি প্রকল্পের জন্য সিসকিউএল তৈরি করতে পদ্ধতি শৃঙ্খলাবদ্ধ স্টাইল থেকে অনুপ্রাণিত হয়েছি। healis.eu/triadb/#latest-release
Athanassios

উত্তর:


96

এসকিউএলএলকেমি আরও পূর্ণ বৈশিষ্ট্যযুক্ত এবং শক্তিশালী (ডেটা ম্যাপার প্যাটার্ন ব্যবহার করে)। জাজানো ওআরএম এর একটি ক্লিনার সিনট্যাক্স রয়েছে এবং এটি লিখতে আরও সহজ (অ্যাক্টিভেকর্ড প্যাটার্ন)। পারফরম্যান্স পার্থক্য সম্পর্কে আমি জানি না।

এসকিউএলএলচেমির একটি ঘোষিত স্তর রয়েছে যা কিছু জটিলতা লুকায় এবং এটি জ্যাঙ্গো ওআরএম এর সাথে আরও সাদৃশ্যযুক্ত একটি অ্যাক্টিভেকর্ড-স্টাইলের সিনট্যাক্স দেয়।

জ্যাঙ্গো "খুব ভারী" হওয়ার বিষয়ে আমি চিন্তা করব না। এটি যথেষ্ট পরিমাণে ডিক্লোলড হয়ে গেছে যে আপনি বাকীটি আমদানি না করেই যদি আপনি চান তবে আপনি ORM ব্যবহার করতে পারেন ।

এটি বলেছিল, আমি যদি ইতিমধ্যে ওয়েব লেয়ারের জন্য চেরিপাই ব্যবহার করতাম এবং কেবল একটি ওআরএমের প্রয়োজন হত, আমি সম্ভবত এসকিউএএলএলকেমি বেছে নেব।


7
তবে আপনি যদি জ্যাঙ্গোর ওআরএম পছন্দ না করেন এবং এসএ ব্যবহার করতে চান তবে উদাহরণস্বরূপ, আপনি অ্যাডমিনের মতো অনেকগুলি জাঙ্গোর বৈশিষ্ট্য হারাবেন। কোনও চুক্তি ভঙ্গকারী নয়, একটি হাঁটুযুক্ত চামড়া।
গ্রেগ লিন্ড

22
সত্য, তবে প্রশ্নের সাথে অপ্রাসঙ্গিক, যা কেবল পাইথন ওআরএম বাছাই করা সম্পর্কে; স্বয়ংক্রিয়ভাবে উত্পন্ন অ্যাডমিন ইন্টারফেস বা অন্যান্য কাঠামোর উপাদানগুলি সম্পর্কে নয়।
কার্ল মেয়ার

8
আমি যুক্তি দিয়ে বলব যে এসকিউএলএলকেমি হালকা ওজনের কিছু নয় - যদিও এটি বেশ দ্রুত হতে পারে। আমি আমার প্রজেক্টটি মিশ্রণে ফেলে দেব, একে বলা হয় পিউই এবং এটি পোস্টগ্রাজের সাথে কথা বলে। খুব সম্প্রতি জ্যাঙ্গো-স্টাইল অনুসন্ধানের জন্য সমর্থনও যুক্ত হয়েছে! চার্লসিলিফার
ডকস /

3
দয়া করে নোট করুন যে জাজানো ওআরএম সম্মিলিত প্রাথমিক কীগুলি সমর্থন করে না এবং এসকিউএএলএলচেমি এটি সমর্থন করে না।
মার্সিন কাপুস্তা

1
@ আইগল আমি আপনার মন্তব্যে বিভ্রান্ত যুক্তি বুঝতে পারছি না। কীভাবে " ORDER BY DESCসক্রিয় রেকর্ড প্যাটার্নের জন্য খারাপ" বোঝায় "ডক্সে নির্দেশিকা সন্ধান করা কঠিন "?
jpmc26

108

যদি আপনি হালকা ওজনের সন্ধান করেন এবং ইতোমধ্যে জ্যাঙ্গো-স্টাইলের ঘোষণাপত্রের মডেলগুলির সাথে পরিচিত হন, তবে উঁকিটি দেখুন: https://github.com/coleifer/peewee

উদাহরণ:

import datetime
from peewee import *

class Blog(Model):
    name = CharField()

class Entry(Model):
    blog = ForeignKeyField(Blog)
    title = CharField()
    body = TextField()
    pub_date = DateTimeField(default=datetime.datetime.now)

# query it like django
Entry.filter(blog__name='Some great blog')

# or programmatically for finer-grained control
Entry.select().join(Blog).where(Blog.name == 'Some awesome blog')

আরও উদাহরণের জন্য দস্তাবেজগুলি পরীক্ষা করুন ।


আপনি এই প্রশ্নের জন্য আমাকে সাহায্য করতে পারেন? Pls রু। স্ট্যাকওভারফ্লো.com
কুকি

81

ঝড়টি যুক্তিযুক্তভাবে সহজ এপিআই করেছে:

from storm.locals import *

class Foo:
    __storm_table__ = 'foos'
    id = Int(primary=True)


class Thing:
    __storm_table__ = 'things'
    id = Int(primary=True)
    name = Unicode()
    description = Unicode()
    foo_id = Int()
    foo = Reference(foo_id, Foo.id)

db = create_database('sqlite:')
store = Store(db)

foo = Foo()
store.add(foo)
thing = Thing()
thing.foo = foo
store.add(thing)
store.commit()

এবং আপনার যখন প্রয়োজন হবে তখন এটি কাঁচা এসকিউএল এ নেমে যাওয়া ব্যথাহীন করে তোলে:

store.execute('UPDATE bars SET bar_name=? WHERE bar_id like ?', []) 
store.commit()

এটি লক্ষ করা উচিত যে ঝড়টি কেবলমাত্র বর্তমান মুহুর্তে মাইএসকিউএল এবং পোস্টগ্রিএসকিউএল সমর্থন করে। ওরাকল সমর্থন যদিও কাজ চলছে।
জেসন বেকার

15
উপরের উদাহরণটি
যেমনটি

2
কুইক_আর্মটি ঝড়ের মতোই সহজ এবং এটি এসকিউএএলএলচেমির উপর নির্মিত তাই এটি খুব শক্তিশালী: পাইপি.পিথথন.আর.পিপি / স্পিক_আর্ম । দাবি অস্বীকার: আমি কুইক_সর্মের লেখক
টাইলার লং

8
ঝড় অনিচ্ছাকৃত। আমি এটি নতুন প্রকল্পের জন্য ব্যবহার করব না।
ম্যাথিয়াস উরলিচস

3
এছাড়াও, দেখে মনে হচ্ছে পাইথন 3
ygormutti

27

আমি সাধারণত এসকিউএএলএলকেমি ব্যবহার করি । এটি বেশ শক্তিশালী এবং সম্ভবত সবচেয়ে পরিণত পাইথন ওআরএম।

আপনি যদি চেরিপাই ব্যবহার করার পরিকল্পনা করছেন, আপনি এটি দেবাভুতেও দেখতে পাবেন কারণ এটি রবার্ট ব্রুয়ার (বর্তমান চেরিপাই প্রকল্পের নেতা) by আমি ব্যক্তিগতভাবে এটি ব্যবহার করি নি, তবে আমি এমন কিছু লোককে জানি যা এটি পছন্দ করে।

এসকিউএলब्জেক্টটি এসকিউএলএলচেমির চেয়ে ওআরএম ব্যবহার করা কিছুটা সহজ তবে এটি ততটা শক্তিশালী নয়।

ব্যক্তিগতভাবে, আমি জ্যাঙ্গো ওআরএম ব্যবহার করব না যতক্ষণ না আমি জাজানোতে পুরো প্রকল্পটি লেখার পরিকল্পনা না করতাম, তবে এটি কেবল আমারই।


এসকিউএলবজেক্ট দুর্দান্ত - সাধারণ ব্যবহারে, ডাটাবেস-স্বতন্ত্র এবং এটি আসলে আপনার জন্য টেবিলগুলি তৈরি করতে পারে! (আমি অলস).
লুকাস জোনস

1
@ লুকাস - সুতরাং এসকিউএলএলকেমি করতে পারেন ...
জেসন বেকার

যতদূর আমি মনে করতে পারি, আমি কেবলমাত্র এসকিউএলজেক্টের প্রশংসা করছি। এটি অনেক দিন আগে ছিল, যদিও ... :)
লুকাস জোনস

@ লুকাস - আমি এরকমই অনুভব করেছি। ভেবেছিলাম আমি এর একটি নোট তৈরি করব :-)
জেসন বেকার

17

এসকিউএলএলচেমির ঘোষিত এক্সটেনশন, যা 0.5 তে স্ট্যান্ডার্ড হয়ে উঠছে, জ্যাঙ্গো বা ঝড়ের মতো একটি ইন্টারফেসে একটি সমস্ত সরবরাহ করে। এটি ডেটাম্যাপার শৈলী ব্যবহার করে কনফিগার করা ক্লাস / সারণীর সাথে বিজোড়ভাবে সংহত করে:

Base = declarative_base()

class Foo(Base):
    __tablename__ = 'foos'
    id = Column(Integer, primary_key=True)

class Thing(Base):
    __tablename__ = 'things'

    id = Column(Integer, primary_key=True)
    name = Column(Unicode)
    description = Column(Unicode)
    foo_id = Column(Integer, ForeignKey('foos.id'))
    foo = relation(Foo)

engine = create_engine('sqlite://')

Base.metadata.create_all(engine)  # issues DDL to create tables

session = sessionmaker(bind=engine)()

foo = Foo()
session.add(foo)
thing = Thing(name='thing1', description='some thing')
thing.foo = foo  # also adds Thing to session
session.commit()

ওয়ান_ টো ম্যানি, অনেক_ টো_মানি, টেবিলের উত্তরাধিকারের মতো অনেকগুলি সম্পর্ক থাকলে তবে জিনিসগুলি খুব জটিল হয়ে ওঠে। এগুলি পরিচালনা করার জন্য আপনাকে হাতে প্রচুর কোড লিখতে হবে। দ্রুত ওআরএম-এর জন্য আমার উত্তর পরীক্ষা করুন। এটি আপনার সময় বাঁচাতে পারে।
টাইলার দীর্ঘ

18
:) টাইলার এসকিউএলএলচেমির নির্মাতাকে জানিয়েছিলেন যে তার দ্রুত ওআরএম ব্যবহার করা উচিত।
অ্যান্টনি ব্রিগস

5
:) বছর পূর্বে ইউটিনেট ডিএমআর @ এলিসের সাথে তর্ক করার বিষয়ে আমাকে স্মরণ করিয়ে দেয় যে সে সত্যিকার অর্থে সি বুঝতে পারে নি
পিটার রোয়েল

@AnthonyBriggs, এই স্লাইডটি পরীক্ষা এবং কেন quick_orm SQLAlchemy চেয়ে জটিল সম্পর্ক হ্যান্ডলিং ভালো আপনি দেখতে পাবেন: slideshare.net/tyler4long/quickorm
টিলার লং

10

আমরা ব্যবহার Elixir SQLAlchemy পাশাপাশি এবং এটি এতদূর পছন্দ করেছেন। এলিক্সির এসকিউএএলএলচেমির উপরে একটি স্তর রাখে যা এটি "অ্যাক্টিভেকর্ড প্যাটার্ন" কাউন্টার অংশগুলির মতো দেখতে আরও সুন্দর করে তোলে।


2
এসকিউএলএলচেমি বাক্সের বাইরে ওওপি এবং ফাংশনাল স্টাইলগুলিকে সমর্থন করে, এলিক্সির এর উপরে ডিক্যারেটিভ প্রোগ্রামিং স্টাইল যুক্ত করে (বেশিরভাগ মডেল ঘোষণার জন্য তবে ব্যয় করা যায়)।
muhuk

5

এটি পাইথনে উচ্চ-স্তরের ডাটাবেস মিথস্ক্রিয়াটির পক্ষে প্রচলিত রেফারেন্স পয়েন্ট বলে মনে হচ্ছে: http://wiki.python.org/moin/HigherLevelDatabaseProgramming

সেখানে থেকে, এটা দেখে মনে হচ্ছে Dejavu থেকে কার্যকরী মার্টিন জালিয়া এর DataMapper প্যাটার্ন মোটামুটি abstractly পাইথন হবে।


আমি আগ্রহী হয়ে দেজাভুর দিকে তাকালাম। নামমাত্র. ডকুমেন্টেশন খুব বিরল (কউউইট "উপস্থাপনা স্তরটির জন্য যা আপনি নিজেরাই আছেন") তাই কেবলমাত্র উন্নত ব্যবহারকারীদের জন্যই আমি বলব।
4

1

আমি মনে করি আপনি এগুলি দেখতে পারেন:

শরৎ

ঝড়


শরৎ সম্ভবত ঝড়ের চেয়ে সহজ, তবে ঝড়ের সাথে অনেকগুলি বৈশিষ্ট্য রয়েছে যা শরতের নয়। এই দুটি বিকল্পেরই সীমিত ডকুমেন্টেশন রয়েছে, যদিও ঝড়টি দ্রুত এটি ঠিক করে দিচ্ছে!
alecW

আপনাকে ধন্যবাদ, শরত্কালটি খুব সুন্দর এবং আকর্ষণীয় দেখায়, তবে শূন্য ডকুমেন্টেশন রয়েছে, যা আমার জন্য চুক্তিভঙ্গকারী।
temoto

1
আমি শরৎ পৃষ্ঠাতে কয়েকটি উদাহরণ চেষ্টা করেছি এবং তারা আমার প্যাকেজ ম্যানেজারটি ইনস্টল করা কোডটির সংস্করণেও কাজ করে না। গুগল গ্রুপের পোস্টগুলিও পুরানো। দেখে মনে হচ্ছে প্রকল্পটি ধীরে ধীরে মারা যাচ্ছে। এটি ব্যবহার করার সুপারিশ করবে না।
জেসন মিজিএনসেকজ

অন্যদিকে ঝড়, দ্রুত আমার পছন্দের ORM হয়ে উঠছে। দস্তাবেজগুলি আরও ভাল হচ্ছে, এবং এআইপিআই পরিষ্কার এবং সরল, যদিও আমি জ্যাঙ্গো ওআরএম দ্বারা নিযুক্ত অ্যাক্টিভেকর্ড প্যাটার্নটিতে আরও কিছুটা অভ্যস্ত, আমি ঝড়টি নেভিগেট করা সহজ বলে খুঁজে পেয়েছি finding
জেসন মিজিয়নসেকজ

1
অটুম এক বছরের জন্য কোনও ক্রিয়াকলাপ বলে মনে হচ্ছে না। groups.google.com/group/autumn-orm
শ্রীধর রত্নাকুমার

1

জ্যাঙ্গোর অব্যবহৃত বৈশিষ্ট্যগুলি পারফরম্যান্স পেনাল্টি দেবে এমন কোনও অনুমানযোগ্য উপায় নেই। আপনি যদি কখনও প্রকল্পটি উপুড় করার সিদ্ধান্ত নেন তবে কেবল কাজে আসবে।


8
একটি অবিচ্ছিন্ন উপায় আছে
বুকজোর

0

আমি একটি ছোট প্রকল্পের জন্য স্টর্ম + এসকিউএলাইট ব্যবহার করেছি এবং আমি মাল্টিপ্রসেসিং যোগ না করা পর্যন্ত এটিতে বেশ খুশি হয়েছিল। একাধিক প্রক্রিয়া থেকে ডাটাবেস ব্যবহার করার চেষ্টা করার ফলে একটি "ডেটাবেস লক করা আছে" ব্যতিক্রম ঘটে। আমি এসকিউএএলএলচেমিতে স্যুইচ করেছি এবং একই কোডটি কোনও সমস্যা ছাড়াই কাজ করেছে।


7
সুষ্ঠু হতে, এসকিউএলাইট প্রকৃতপক্ষে একযোগে প্রবেশের জন্য ডিজাইন করা হয়নি।
জিয়াং চিয়ামিভ

2
@ Xion +1। এসকিউএলআইটি হ'ল একটি ফাইল যা কোনও ডেমোন চলমান।
ই-সন্তুষ্ট

-1

এসকিউএলএলকেমি খুব শক্তিশালী। তবে এটি থ্রেড নিরাপদ নয় থ্রেড-পুল মোডে চেরিপির সাথে কাজ করার সময় আপনি এটি মনে রাখবেন তা নিশ্চিত করুন।


2
এটি কি সত্য যে এসকিউএলএলচেমি থ্রেডসেফ নয়? তারপরে এটি ডাব্লুএসজিআই এর মাধ্যমে পিরামিড অ্যাপ্লিকেশনগুলিতে কীভাবে ব্যবহৃত হয়, যা মূলত লোকেরা থ্রেড মোডে স্থাপন করে? এই স্ববিরোধী বক্তব্যের কোনও নিশ্চয়তা।
রবি কুমার

1
অবশ্যই এসকিউএএলএলচেমি থ্রেড-নিরাপদ।
ম্যাথিয়াস উরলিচস

-7

আমি এসকিউএএলএলকেমি পরীক্ষা করে দেখি

এটি ব্যবহার করা সত্যই সহজ এবং আপনার সাথে কাজ করা মডেলগুলি মোটেই খারাপ নয়। জ্যাঙ্গো এর ORM এর জন্য এসকিউএএলএলচেমি ব্যবহার করে তবে এটি নিজে ব্যবহার করে আপনাকে এটি পুরো শক্তি ব্যবহার করতে দেয়।

Orm অবজেক্ট তৈরি এবং নির্বাচন করার জন্য এখানে একটি ছোট উদাহরণ

>>> ed_user = User('ed', 'Ed Jones', 'edspassword')
>>> session.add(ed_user)
>>> our_user = session.query(User).filter_by(name='ed').first() 
>>> our_user
    <User('ed','Ed Jones', 'edspassword')>

18
জ্যাঙ্গো এর ওআরএম এর জন্য স্ক্ল্যাচেমি ব্যবহার করে না । স্ক্ল্যাচমিচিকে optionচ্ছিক ওআরএম করার জন্য কিছু কাজ করা হয়েছে, তবে এটি সম্পূর্ণ হয়নি complete
শেরবাং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.