باستخدام Python Quick insere العديد من الأعمدة في sqlite mysql

StackOverflow https://stackoverflow.com/questions/3732490

سؤال

إذا كانت 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)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top