পাইথনে sqlite3 মডিউল ব্যবহার করে SQLite ডেটাবেসে ডেটা সংরক্ষণ করা যায়। কিন্তু ফাংশন অবজেক্ট সরাসরি ডেটাবেসে সংরক্ষণ করা যায় না — ফাংশনের সোর্স কোড, নাম, বা সিরিয়ালাইজড ফরম (pickle) সংরক্ষণ করতে হয়।
উদাহরণ: Employee অবজেক্ট সংরক্ষণ
import sqlite3
from employee import Employee # ধরে নেওয়া হয় Employee ক্লাস আছে
conn = sqlite3.connect('employee.db')
c = conn.cursor()
# টেবিল তৈরি
c.execute('''CREATE TABLE employee(first TEXT, last TEXT, pay INTEGER)''')
# ডেটা ইনসার্ট
emp_1 = Employee('John', 'Doe', 50000)
emp_2 = Employee('Jane', 'Doe', 60000)
emp_3 = Employee('James', 'Dell', 80000)
c.execute("INSERT INTO employee VALUES(:first, :last, :pay)",
{'first': emp_1.first, 'last': emp_1.last, 'pay': emp_1.pay})
c.execute("INSERT INTO employee VALUES(:first, :last, :pay)",
{'first': emp_2.first, 'last': emp_2.last, 'pay': emp_2.pay})
c.execute("INSERT INTO employee VALUES(:first, :last, :pay)",
{'first': emp_3.first, 'last': emp_3.last, 'pay': emp_3.pay})
# কোয়েরি
c.execute("SELECT * FROM employee WHERE last='Doe'")
print(c.fetchone())
print(c.fetchmany(2))
conn.commit()
conn.close()
আউটপুট
('James', 'Dell', 80000)
[('James', 'Dell', 80000), ('James', 'Dell', 80000)]
নোট: ফাংশন সংরক্ষণ করতে চাইলে
- সোর্স কোড:
inspect.getsource(func)দিয়ে স্ট্রিং হিসেবে সংরক্ষণ। - Pickle:
pickle.dumps(func)দিয়ে বাইনারি হিসেবে সংরক্ষণ (সিকিউরিটি রিস্ক আছে)। - নাম রেফারেন্স: ফাংশন নাম স্ট্রিং হিসেবে সংরক্ষণ করে পরে
getattr(module, name)দিয়ে কল।