Saya memiliki tabel berikut di database saya:

create table tt (
id varchar(20),
hora varchar(20),
preco varchar(20),
qtde varchar(20),
cpa varchar(20),
vda varchar(20),
agressor varchar(20)
);

Saya menempatkan semuanya seperti varchar (30) karena kepala saya terlalu putih dengan kesalahan yang mereka buat.

Bahkan dengan semua bidang seperti varchar (30) saya tidak dapat memasukkan ke dalam 7 nilai berikut melalui python

19928 12:53:34 4.049,00 5 107 308 Comprador

(19928, "Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat ':53:34, 4.049,00, 5, 107, 308, Comprador)' di baris 1")

Perintah saya untuk dimasukkan ke dalam adalah sebagai berikut:

c.execute("INSERT INTO tt VALUES ({}, {}, {}, {}, {}, {}, {})".format(id_, hora, preco, qtde, cpa, vda, agressor))
conn.commit()

Bisa juga membantu saya dalam jenis variabel apa yang digunakan untuk membuat tabel? (int, varchar (20), mengambang)?

0
Leonardo Henriques 26 Januari 2020, 07:39

2 jawaban

Jawaban Terbaik

Anda harus menggunakan pernyataan yang disiapkan di sini, yang kemungkinan juga akan menyelesaikan kesalahan Anda saat ini:

cursor = conn.cursor(prepared=True)
sql = """INSERT INTO tt (id, hora, preco, qtde, cpa, vda, agressor)
         VALUES (%s, %s, %s, %s, %s, %s, %s)"""
cursor.execute(sql, (id_, hora, preco, qtde, cpa, vda, agressor,))
conn.commit()

Dengan menggunakan pendekatan ini, Anda membiarkan Python/MySQL khawatir bagaimana cara keluar dari data string Anda dengan benar dengan tanda kutip tunggal. Perhatikan juga bahwa praktik terbaik adalah selalu secara eksplisit mencantumkan kolom target untuk sisipan, yang telah saya lakukan di atas.

3
Tim Biegeleisen 26 Januari 2020, 04:44

Masalah Anda adalah kueri Anda terlihat seperti ini:

INSERT INTO tt VALUES (19928, 12:53:34, 4.049,00, 5, 107, 308, Comprador)

Yang tidak valid karena waktu dan nilai string yang tidak dikutip, dan koma di salah satu angka. Anda perlu menggunakan formulir pernyataan yang disiapkan:

c = conn.cursor()
c.execute("INSERT INTO tt VALUES (%s, %s, %s, %s, %s, %s, %s)",(id_, hora, preco, qtde, cpa, vda, agressor))
conn.commit()
c.close()

Perhatikan bahwa ketika Anda mengubah tipe data kolom, untuk memasukkan 4.049,00 ke MySQL sebagai angka, Anda harus terlebih dahulu menukar karakter , dan ..

0
Nick 26 Januari 2020, 22:38