Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bao gồm các lệnh gọi hàm DB trong python MySQLdb executeutemany ()

Phương pháp dưới đây không lý tưởng lắm, nhưng, thật không may, đó là cách duy nhất tôi biết.

Ý tưởng là xây dựng SQL theo cách thủ công, sử dụng connection.literal để thoát khỏi các đối số cho bạn:

cursor=connection.cursor()
args=[(1,'foo'),(2,'bar')]
sql=('INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES '
     +','.join(
         ['(%s,%s,NOW())'%connection.literal(arg)
          for arg in args]))
cursor.execute(sql)

Điều này trông thật kinh khủng và có thể khiến da của bạn thu thập dữ liệu, nhưng nếu bạn nhìn kỹ hơn (trong /usr/lib/pymodules/python2.6/MySQLdb/cursors.py) những gì MySQLdb đang làm trong cursors.executemany , Tôi nghĩ rằng điều này giống như những gì hàm đó đang thực hiện, trừ đi sự trộn lẫn do regex cursors.insert_values không phân tích cú pháp chính xác các dấu ngoặc đơn lồng nhau. (eek!)

Tôi vừa cài đặt ourql , một giải pháp thay thế cho MySQLdb và rất vui khi báo cáo rằng

sql='INSERT INTO `foo` (`fooid`,`data`,`time_added`) VALUES (?,?,NOW())'
cursor.executemany(sql,args)

hoạt động như mong đợi với ourql.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giỏ hàng và quản lý kho

  2. # 1136 - Số cột không khớp với số giá trị?

  3. Chọn 3 bản ghi gần đây nhất trong đó các giá trị của một cột là khác nhau

  4. sql tham gia dưới dạng biểu đồ venn

  5. Không thể đặt lại Mật khẩu gốc:windows, MySQL8.0