إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

أثناء تحويل txt الي قاعدة بيانات

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [مشكلة] أثناء تحويل txt الي قاعدة بيانات

    السلام عليكم و رحمة الله وبركاته

    كيف الحال إخواني إن شاء الله بخير

    إخواني انا لدي مشروع بسيط وهو عن طريق بايثون و يقوم على فحص منافذ الويب و يقوم بطباعة أسم المنافذ و رقمه و معلومات عن الخدمة

    لكن المشكلة الي واجهتني أن قمت بسحب ملف txt و هو يحتوي على ارقام و أسماء المنافذ من المنفذ 1 الي أخر منفذ

    لكن توجب علي تحويله الي قاعدة بيانات sqlite
    فقمت بقرائة الملف سطر سطر و تحويله الي list ثم قمت بكل العمل لكن المشكلة يقوم بتخزين سطرين ثم يقف و يعطيني رسالة خطأ و هي
    pysqlite2.dbapi2.OperationalError: database is locked
    لا أعلم ما هيب المشكلة بالضبط حاولت يمين يسار و نفس المشكلة
    قمت بوضع السكربت الذي يقوم بتحويل ملف txt الي sqlite
    و ملف txt الي يحتوي على منافذ و الخدمات و أيضا ملف sqlite و يحتوي على الجداول و كل شيء جاهز

    لكن أتا في بالي المشكلة و هي ان بعض المنافذ لها نفس الرقم و في الجدول المخصص لرقم الممنفذ جعلته key فهل هذي هي المشكلة ؟؟ علما غير رقم المنفذ لكن نفس المشكلة

    الملفات مرفقة
    port.sqlite قاعدة البيانات
    p.py ملف بايثون و هو الذي يقوم بتحويل ملف txt الي قاعدة بيانات
    service.txt و هو الملف الذي يحتوي على المنافذ و الخدمات
    الملفات المرفقة
    i will miss u Michael Jackson

  • #2
    جرب هذا الامر
    كود:
    echo "CREATE TABLE info(id INTEGER , name VARCHAR(50), about VARCHAR(100));" > service.sql && sed -r "s/([a-zA-Z0-9]+)[^0-9]+([0-9]+)\/[a-z]+[^#]*#?[^a-zA-Z]*(.*)/INSERT IGNORE INTO info VALUES(\2, '\1', '\3');/" service.txt >> service.sql && sqlite3 -init service.sql service.db

    تعليق


    • #3
      مساعدة حسب معرفتي البسيطة في بايثون

      كود:
      #!/usr/bin/python
      from pysqlite2 import dbapi2 as sqlite
      data = open("/home/oxyg3n/Desktop/service.txt")
      lines = data.readlines()
      for line in lines :
        [COLOR=Red]  dbconnect = sqlite.connect("/home/oxyg3n/port.sqlite")[/COLOR]
          cursor = dbconnect.cursor()
          line = line.split()
          port = line[1].split("/")
          sql = 'INSERT IGNORE INTO info VALUES("%s","%s","%s")'%(line[0], line[1][0],line[1][1:])
          cursor.execute(sql)
          dbconnect.commit()
          print "Done"
      cursor.close()
      لماذا تتصل مع قاعدة البيانات مع كل سطر؟
      و أيضاً ال schema لقاعدة البيانات
      كود:
      CREATE TABLE info(name VARCHAR(50),id INTEGER [COLOR=Red]PRIMARY KEY[/COLOR],about VARCHAR(100))
      كيف يكون primary key و هو ليس unique ؟
      و لماذا لا تستخدم sqlite3؟

      جرب هذا الكود في الملف p.py بدلاً من القديم:
      كود:
      #!/usr/bin/python
      import sqlite3
      import os.path
      data = open("service.txt")
      lines = data.readlines()
      dbfile='port.sqlite'
      if os.path.exists(dbfile): os.remove(dbfile)
      conn=sqlite3.connect(dbfile)
      conn.execute("CREATE TABLE info(name VARCHAR(50),id INTEGER,about VARCHAR(100));")
      for line in lines :
          line = line.split()
          sql = 'INSERT IGNORE INTO info VALUES("%s","%s","%s")'%(line[0], line[1][0],line[1][1:])
          conn.execute(sql)
      conn.commit()
      conn.close()
      print "Done"
      اعتبرها مؤقتة حتي يأتي أحد مبرمجي البايثون.

      تعليق

      يعمل...
      X