অ্যাপ্লিকেশন নাম সেট করুন
আপনি যদি অনেকগুলি প্রক্রিয়া চালানোর প্রত্যাশা করেন তবে তারা কোথায় থেকে সংযুক্ত হচ্ছে তা আপনার জানতে হবে। পিজিবিউনসার এটিকে অদৃশ্য করে তুলবে pg_stat_activity। application_nameআপনার প্রয়োজনীয় তথ্যগুলি যত্ন সহকারে সেটিংস করে সমাধান করুন:
# Sets the application name for this connection in the form of
# application-name:user@host
prog = os.path.basename(sys.argv[0]) or 'desjob'
username = pwd.getpwuid (os.getuid ()).pw_name
hostname = socket.gethostname().split(".")[0]·
args.setdefault('connect_args', {'application_name': "%s:%s@%s" %
(prog, username, hostname)})
args.setdefault('isolation_level', "AUTOCOMMIT")
engine = create_engine(url, **args)
সেশন পছন্দ করুন
একটি ইঞ্জিন অবজেক্টের অনুরোধগুলি স্প্যান করতে এবং একাধিক সংযোগগুলিতে ধরে রাখতে পারে সেজন্য সেশনগুলি ব্যবহার করুন। পোস্টগ্রিসের সাথে সংযোগ করা খুব ব্যয়বহুল নয়, পিজিবিউনসারের সাথে এটি এত কমও রয়েছে। আমি সর্বদা ব্যবহার করব NullPoolযাতে পোস্টগ্র্রেসে আপনি যে সংযোগগুলি দেখতে পাবেন তা হ'ল সংযোগগুলি যা আসলে ব্যবহৃত হচ্ছে।
from sqlalchemy.pool import Pool, NullPool
engine = create_engine(uri, poolclass=NullPool)
নিষ্ক্রিয় লেনদেনগুলি বাদ দিন
যদি আপনার অভিপ্রায়টি স্ক্রিনে পিজিবিউনসার ব্যবহার করা হয় তবে আপনার পক্ষে লেনদেন বন্ধ রেখে দেওয়া এড়ানো জরুরি। এটি করার জন্য আপনাকে চালু করতে autocommit হবে । এটি এসকিউএএলএলচেমির সাথে সহজ নয় ... এখানে তিনটি জায়গা রয়েছে যেখানে "অটোকোমিট" নামক কিছু সেট করা যেতে পারে:
সাইকোপজি 2 স্বতঃসংশোধন
conn = psycopg2.connect(uri)
conn.autocommit = True
অনিরাপদ অনিরাপদ বলে ধরে নেওয়া হয়েছে কারণ এসকিউএএলএলচেমির নীচে কী ঘটছে তা জানতে হবে।
সেশন অটোকোমিট
Session = sessionmaker(bind=engine, autocommit=True)
session = Session()
এর জন্য সতর্কতা অবলম্বন করা দরকার:
session.begin()
session.execute(...)
session.rollback()
ফাংশন কলিং এবং ব্যতিক্রম হস্তান্তর অতীব কঠিন কারণ
begin()এবং commit()নেস্টেড হতে পারে না:
def A():
session.begin()
...
session.rollback()
def B():
session.begin()
try:
A() # error, already open
এই মোডে সাইকোপজি 2 autocommitউপস্থিত হয় False(ডিফল্ট)
ইঞ্জিন অটোকোমিট
ইঞ্জিন "AUTOCOMMIT"তৈরি করার সময় ইঞ্জিন বিচ্ছিন্নতা মোড সেট করা নতুন ডিফল্ট আচরণ স্থাপন করে যা বিদ্যমান কোডে পরিবর্তনের প্রয়োজন হতে পারে না।
engine = create_engine(uri, isolation_level="AUTOCOMMIT")
এই মোডে সাইকোপজি 2 autocommitউপস্থিত হয়True
এখানে প্রধান সমস্যাটি হ'ল গ্যারান্টি দেওয়ার একমাত্র উপায় হ'ল লেনদেনে কোডের একটি ব্লক মোড়ানো আছে তা হ'ল বিবৃতিগুলি ম্যানুয়ালি নির্গত করা:
session.execute("BEGIN")
#...
session.execute("COMMIT")