English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite في Flask

يملك Python دعمًا مدمجًا لـ SQLite. يتم تضمين مكتبة SQLite3 مع إصدار Python. في هذا الفصل، سنرى كيف يتفاعل تطبيق Flask مع SQLite.

إنشاء قاعدة بيانات SQLite ‘database.db’وفيها يتم إنشاء جدول student.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
import sqlite3
 conn = sqlite3.connect('database.db')
 print "Opened database successfully";
 conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
 print "Table created successfully";
 conn.close()

يحتوي تطبيق Flask على ثلاث وظائف عرض.

وظيفة new_student() الأولى مرتبطة بمسار URL ('/addnew'). إنها تعرض ملف HTML يحتوي على نموذج معلومات الطالب.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
@app.route('/enternew')
 def new_student():
     return render_template('student.html')

كود HTML لـ 'student.html' كما يلي -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>مثال Flask</title>
 </head>
    <body>
     <form action="{{ url_for('addrec') }}" method="POST">
          <h3>معلومات الطالب</h3>
          الاسم<br>
          <input type="text" name="nm"/></br>
          العنوان<br>
          <textarea name="add"/><br>
          المدينة<br>
          <input type="text" name="city"/><br>
          الرمز البريدي<br>
          <input type="text" name="pin"/><br>
          <input type="submit" value="إرسال" /><br>
       </form>
    </body>
 </html>

يظهر أن بيانات الاستمارة يتم نشرها إلى دالة addrec() التي تعادها URL => ‘/addrec’.

يتمكن دالة addrec() من استرجاع بيانات الاستمارة باستخدام طريقة POST ووضعها في جدول الطلاب. يتم عرض الرسائل المتعلقة بالنجاح أو الفشل لعملية الإدراج كـ ‘result.html’.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
@app.route('/addrec', methods = ['POST', 'GET'])
 def addrec():
     if request.method == 'POST':
        try:
           nm = request.form['nm']
           addr = request.form['add']
           city = request.form['city']
           pin = request.form['pin']
           with sql.connect("database.db") as con:
              cur = con.cursor()
              cur.execute("INSERT INTO students (name, addr, city, pin) 
                VALUES (?, ?, ?, ?)"((nm, addr, city, pin))
              con.commit()
              msg = "Record successfully added"
        except:
           con.rollback()
           msg = "error in insert operation"
        finally:
           return render_template("result.html", msg = msg)
           con.close()

result.html يحتوي سكريبت HTML على تعبيرات فرار تظهر نتيجة عملية الإدراج {{ msg }}.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>مثال Flask</title>
 </head>
    <body>
       نتيجة العملية : {{ msg }}
       <h2><a href="/">عودة إلى الصفحة الرئيسية</a></h2>
    </body>
 </html>

يحتوي هذا التطبيق على list() function أخرى تمثلها URL => ‘/list’. إنها تملأ ‘rows’ كMultiDict object يحتوي على جميع السجلات في جدول الطلاب. يتم نقل هذا object إلى قالب list.html.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
@app.route('/list')
 def list():
     con = sql.connect("database.db")
     con.row_factory = sql.Row
     cur = con.cursor()
     cur.execute("select * from students")
     rows = cur.fetchall(); 
     return render_template("list.html", rows=rows)

هذا الملف list.html هو قالب يمر عبر مجموعة السجلات ويظهر البيانات في جدول HTML.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>مثال Flask</title>
 </head>
    <body>
       <table border="1">
          <thead>
             <td>التغيير الاسم</td>
             <td>العنوان</td>
             <td>المدينة</td>
             <td>الت编码</td>
          </thead>
          {% for row in rows %}
             <tr>
                <td>{{row['name']}}</td>
                <td>{{row['addr']}}</td>
                <td>{{row['city']}}</td>
                <td>{{row['pin']}}</td> 
             </tr>
          {% endfor %}
       </table>
       <a href="/">عودة إلى الصفحة الرئيسية</a>
    </body>
 </html>

في النهاية، URL => ‘/‘ يظهر ‘home.html’ كنقطة الدخول للتطبيق.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
@app.route('/')
 def home():
     return render_template('home.html')

هذا هو رمز تطبيق Flask-SQLite الكامل.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ar.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template, request
 import sqlite3 as sql
 import sqlite3
 app = Flask(__name__)
 @app.route('/')
 def home():
     return render_template('home.html')
 @app.route('/enternew')
 def new_student():
     return render_template('student.html')
 @app.route('/addrec', methods = ['POST', 'GET'])
 def addrec():
     if request.method == 'POST':
        try:
           nm = request.form['nm']
           addr = request.form['add']
           city = request.form['city']
           pin = request.form['pin']
           with sql.connect("database.db") as con:
              cur = con.cursor()
              cur.execute("INSERT INTO students (name,addr,city,pin) VALUES (?, ?, ?, ?)", (nm, addr, city, pin))
              con.commit()
              msg = "Record successfully added"
        except:
           con.rollback()
           msg = "error in insert operation"
        finally:
           return render_template("result.html", msg = msg)
           con.close()
 @app.route('/list')
 def list():
     con = sql.connect("database.db")
     con.row_factory = sql.Row
     cur = con.cursor()
     cur.execute("select * from students")
     rows = cur.fetchall();
     return render_template("list.html", rows=rows)
 @app.route('/init')
 def init():
     conn = sqlite3.connect('database.db')
     print("نجح في فتح قاعدة البيانات")
     conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
     print("تم إنشاء الجدول بنجاح")
     conn.close()
     return None
 if __name__ == '__main__':
     app.run(debug=True)

شغل هذا السكربت من داخل Python shell، وسيتم تشغيل الخادم المطور عند بدء التشغيل. اذهب إلى: http://localhost:5000/ سيظهر في المتصفح قائمة بسيطة مثل هذه -

انقر إضافة معلومات الطلاب فتح رابط لإنشاء نموذج معلومات الطلاب.

ملء النموذج و提交. ستعمل الدوال الأساسية على إدراج هذا السجل في جدول الطلاب.

عد إلى الصفحة الرئيسية واختر رابط "عرض القائمة"، سيتم عرض جدول بيانات العينة.