ماهى PySQLite؟
هى interface ل SQLite من خلال ال Python
للتحميل اضغط هنا
للتستيب مثل اى Lib
python setup.py install
لنبدأ
1- هنحتاج نعمل import لل module
PySQLite هتعملها import ك pysqlite2 ولكن ال lib دى بردو اللى يهمنا فيها هو sub-module بإسم dbapi2
Writing
2- هنحتاج نعمل Connection مع DB تمام ؟ ال db نفسها عبارة عن file عادى جدا -فى حال عدم وجوده هيتم إنشاء file جديد- فلعمل ال Connection هنحتاج نستخدم ال connect method الموجودة بال dbapi2
نعمل connect ال connect ميثود بتنشئ file فى حال عدم وجوده وإذا موجود هيتعمل return بيه
كدا انشأنا ال connection بنجاح
ملحوظة: تقدر تعمل Quick Access DB على ال Memory
بعد ماأنشأنا ال Connection محتاجين نعمل Cursor عشان نستخدمه فى التعامل مع ال DB
جميل يبقة هنحتاج SQL Statement
))'
ولتنفيذ ال SQL Statement نستخدم ال execute method الخاصة بال cursor object
>
ندخل بعض ال داتا
نقدر ندخل الfields كالتالى ..
كل اللى عليك تباصى علامة إستفهام وفى ال 2nd argument تخليها tuple مكونة من ال vars اللى عايز تدخلها ..
بعد ماعدلنا او اضفنا لازم نستدعى ال Commit method لحفظ التعديلات دى ..
>>> dbConnection.commit()
ملحوظة: إذا حبيت تخلى التعديلات يتم تنفيذها اوتوماتيك
ضيف فى ال connect ميثود الخاصة بإنشاء الconnection التالى
autocommit=1
فى حالة قيامك بتعديل ما وحبيت ترجع فيه بنستخدم ال rollback method
بعد إنتهائك اقفل الcursor, connection
ال Reading
كالعادة لازم نعمل connect على db وننشئ ال connection
ونعمل cursor object بإستخدم cursor ميثود الموجودة بال connection object
ننفذ بعض ال sql statements ولكن هنا هنخليها عبارة عن إستعلامات بسيطة
ننشئ الconnection
ننشئ cursor
sql statement ليتم تنفيذها
تنفيذ ال sqlStmt
fetchall هى ميثود بتعيد كل الrows على صورة tuples ف list
او تقدر تعمل شئ مشابه لكدا بإنك ت iterate على كل الrows اللى موجودة بال result
لاحظ إنك تقدر تتعامل معاها ب .next لأنها iterator
fetchmany(num)
بتعيد num معين من ال rows
fetchone()
بتعيد row واحد
جميل جدا .. طب وإذا حبيت اخزن user defined type ؟
بكل بساطة اعمل ال class بتاعك الأول
ننشئ connection و cursor ولكن ننبه ال database انها تعمل parse لل declared types زى ال Person مثلا .. هنغير شوية ونتعامل مع ال memory
[/CODE]
الوقتى ننشئ table بحيث إنه ياخد 2 fields وهم ال ID, information
جميل جدا .. ناقص إننا نحدد إزاى ال object بتاعنا يتحول ل string وازاى نجمع ال data بتاعته تانى من ال string دا
ملحوظة: إحنا بنتكلم على مجرد text بإستخدم toString method مثلا ..مش serializing objects او Pickling
وكيفية التجميع .. بكل بساطة إحنا حولنا ال fields بتاعت ال Person object ل string ودمجناهم ب ;.. يبقة نقدر نجمعهم بإننا نفصل ال ; ونباصى ال قيم الخاصة بال fields دى لل Constructor وننشئ object منها
بعد ماعملنا الميثودز الخاصة بالتحويل والتجميع .. كل اللى ناقص اننا نبلغ SQLite بكدا
ننشئ شوية objects
ونضيفهم لل Table
نجرب نستعلم عن الموجودين
نقفل ال cursor, connection
الكود النهائى
وللمزيد راجع التالى :
هى interface ل SQLite من خلال ال Python
للتحميل اضغط هنا
للتستيب مثل اى Lib
python setup.py install
لنبدأ
1- هنحتاج نعمل import لل module
PySQLite هتعملها import ك pysqlite2 ولكن ال lib دى بردو اللى يهمنا فيها هو sub-module بإسم dbapi2
Writing
2- هنحتاج نعمل Connection مع DB تمام ؟ ال db نفسها عبارة عن file عادى جدا -فى حال عدم وجوده هيتم إنشاء file جديد- فلعمل ال Connection هنحتاج نستخدم ال connect method الموجودة بال dbapi2
كود:
#!bin/python from pysqlite2 import dbapi2 as SQLite
كود:
dbConnection=SQLite.connect("mydb.sqlite")
ملحوظة: تقدر تعمل Quick Access DB على ال Memory
كود:
memConnection=SQLite.connect(“:memory:”)
كود:
cursor=dbConnection.cursor() #gets a cursor object.. عايزين ننشئ Table وليكن بإسم Info ويشمل 3 Fields مثلا id: integer, primary Key name: varchar(50) phone: varchar(10)
كود:
sqlStmt='CREATE TABLE info (id INTEGER PRIMARY KEY, name VARCHAR(50), phone VARCHAR(10
ولتنفيذ ال SQL Statement نستخدم ال execute method الخاصة بال cursor object
كود:
>>> cursor.execute(sqlStmt) <pysqlite2.dbapi2.Cursor object at 0x0128B230
ندخل بعض ال داتا
كود:
>>> cursor.execute('INSERT IGNORE INTO info VALUES(null, "ahmed youssef", "12345678")') <pysqlite2.dbapi2.Cursor object at 0x0128B230> >>> cursor.execute('INSERT IGNORE INTO info VALUES(null, "3amer mohamed", "41234114")') <pysqlite2.dbapi2.Cursor object at 0x0128B230>
كود:
>>> username="guru" >>> phone ="36987452"
كود:
>>> cursor.execute('INSERT IGNORE INTO info VALUES(null, ?, ?)', (username, phone)) #replaced... <pysqlite2.dbapi2.Cursor object at 0x0128B230>
>>> dbConnection.commit()
ملحوظة: إذا حبيت تخلى التعديلات يتم تنفيذها اوتوماتيك
ضيف فى ال connect ميثود الخاصة بإنشاء الconnection التالى
autocommit=1
فى حالة قيامك بتعديل ما وحبيت ترجع فيه بنستخدم ال rollback method
بعد إنتهائك اقفل الcursor, connection
كود:
cursor.close() dbConnection.close();
كالعادة لازم نعمل connect على db وننشئ ال connection
ونعمل cursor object بإستخدم cursor ميثود الموجودة بال connection object
ننفذ بعض ال sql statements ولكن هنا هنخليها عبارة عن إستعلامات بسيطة
ننشئ الconnection
كود:
>>> dbConnection=SQLite.connect("mydb.sqlite") #reopen the db..
كود:
>>> cursor=dbConnection.cursor() >>> #let's query the db..
كود:
>>> sqlStmt='SELECT * from info'
كود:
>>> cursor.execute(sqlStmt)
كود:
>>> cursor.fetchall() [(1, u'ahmed youssef', u'12345678'), (2, u'3amer mohamed', u'41234114'), (3, u'guru', u'36987452')]
كود:
>>> for row in cursor: #id, name, phone print "----------" print "ID: ", row[0] print "Name: ", row[1] print "Phone: ", row[2] ---------- ID: 1 Name: ahmed youssef Phone: 12345678 ---------- ID: 2 Name: 3amer mohamed Phone: 41234114 ---------- ID: 3 Name: guru Phone: 36987452
كود:
>>> cursor.next() (1, u'ahmed youssef', u'12345678') >>> cursor.next() (2, u'3amer mohamed', u'41234114')
بتعيد num معين من ال rows
كود:
>>> ret=cursor.fetchmany(2) >>> ret [(1, u'ahmed youssef', u'12345678'), (2, u'3amer mohamed', u'41234114')]
بتعيد row واحد
كود:
>>> one=cursor.fetchone() >>> one (3, u'guru', u'36987452')
بكل بساطة اعمل ال class بتاعك الأول
كود:
class Person(object): def __init__(self, name, phone): self.name=name self.phone=phone
كود:
#create a connection. memConnection=SQLite.connect(':memory:', detect_types=SQLite.PARSE_DECLTYPES)
كود:
[CODE]#cursor cursor=memConnection.cursor()
الوقتى ننشئ table بحيث إنه ياخد 2 fields وهم ال ID, information
كود:
cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, p person)")
ملحوظة: إحنا بنتكلم على مجرد text بإستخدم toString method مثلا ..مش serializing objects او Pickling
كود:
def adaptPerson(person): return "%s;%s" %(person.name, person.phone)
كود:
def convToPerson(text): name, phone=map(str, text.split(";")) return Person(name, phone)
كود:
SQLite.register_adapter(Person, adaptPerson) SQLite.register_converter("person", convToPerson)
كود:
p1=Person("ahmed", "12345678") p2=Person("rul3z", "89745632")
كود:
cursor.execute('INSERT IGNORE INTO test VALUES(null, ?)', (p1, )) cursor.execute('INSERT IGNORE INTO test VALUES(null, ?)', (p2, ))
كود:
#select.. cursor.execute('SELECT * from test') for row in cursor: print row
#output:
(1, (ahmed;12345678))
(2, (rul3z;89745632))
(1, (ahmed;12345678))
(2, (rul3z;89745632))
كود:
#clean-up cursor.close() memConnection.close()
كود:
#!bin/python from pysqlite2 import dbapi2 as SQLite #dbName='myobjDBTest.sqlite' #create a connection. #dbConnection=SQLite.connect(dbName, detect_types=SQLite.PARSE_DECLTYPES) memConnection=SQLite.connect(':memory:', detect_types=SQLite.PARSE_DECLTYPES) #cursor cursor=memConnection.cursor() class Person(object): def __init__(self, name, phone): self.name=name self.phone=phone def __repr__(self): return "(%s;%s)" %(self.name, self.phone) #define a method to register it.. def adaptPerson(person): return "%s;%s" %(person.name, person.phone) def convToPerson(text): name, phone=map(str, text.split(";")) return Person(name, phone) SQLite.register_adapter(Person, adaptPerson) SQLite.register_converter("person", convToPerson) p1=Person("ahmed", "12345678") p2=Person("rul3z", "89745632") #create a test table.. cursor.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, p person)") #add cursor.execute('INSERT IGNORE INTO test VALUES(null, ?)', (p1, )) cursor.execute('INSERT IGNORE INTO test VALUES(null, ?)', (p2, )) #select.. cursor.execute('SELECT * from test') for row in cursor: print row #clean-up cursor.close() memConnection.close()
تعليق