باستخدام Python Quick insere العديد من الأعمدة في sqlite mysql
-
03-10-2019 - |
سؤال
إذا كانت NewData قائمة بأعمدة X ، فكيف تحصل على الأعمدة الفريدة-عدد أعضاء First Tuple. (لين غير مهم.) تغيير عدد "؟" لمطابقة الأعمدة وإدخالها باستخدام العبارة أدناه.
csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
المحلول
بقلم "NewData Is List of X Columns" ، أتصور أنك تعني x
tuples, ، ومنذ ذلك الحين تستمر في التحدث عن "The First Tuple". إذا Newdata
هي قائمة من tuples ، y = len(Newdata[0])
هو عدد العناصر في أول واحد من تلك tuples.
على افتراض أن هذا هو الرقم الذي تريده (وجميع tuples كان لديه نفس عدد العناصر ، وإلا executemany
إرادة الفشل!) ، الفكرة العامة في إجابة @Nathan صحيحة: قم ببناء السلسلة مع العدد المناسب من علامات الأسئلة المفصولة الفاصلة:
holders = ','.join('?' * y)
ثم أدخله في بقية بيان SQL. إن طريق ناثان لإدراج مناسب لمعظم الإصدارات 2. في أي إصدارات ، ولكن إذا كان لديك 2.6 أو أفضل ،
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
يفضل حاليًا (يعمل أيضًا في Python 3. Uny).
أخيراً،
csr.executemany(sql, Newdata)
ستفعل ما تريد. تذكر أن ترتكب المعاملة بمجرد الانتهاء!-)
نصائح أخرى
إذا كنت تبحث عن الحد الأقصى لعدد العناصر في جميع العناصر في Newdata
, ، إنه ببساطة:
num_columns = max(len(t) for t in Newdata)
هذا ، بالطبع ، يفترض بيثون 2.5 أو أكثر.
ليس هذا أنا متأكد من أن ما تحاوله سيعمل ، لكن بيان الإدراج سيصبح بعد ذلك:
sql = "insert in test.data القيم (٪ s)" ٪ "،". انضم ('؟' * num_columns)