Использование %s
в строке запроса не будет работать должным образом, вы можете использовать % replacement_string
, но похоже, что вы хотите executemany()
и MySQL сделает замену на лету. Это более безопасный и лучший способ сделать это, поэтому вы на правильном пути.
Правильный синтаксис:
import csv
import mysql.connector
mydb = mysql.connector.connect(host="localhost", user="root", passwd="root", database="4g_hs_upgrade")
mycursor = mydb.cursor()
sql = "INSERT INTO test (num) VALUES (%s)"
val = 'John'
mycursor.execute(sql, (val))
mydb.commit()
Обратите внимание, что значение 'John'
не очень логично для столбца с именем num
, но я просто следую вашему примеру.
Вы пропустили круглые скобки, что вызвало путаницу, поскольку предполагало, что вы хотите использовать функцию замены строк в Python %s
, хотя вы, вероятно, и добились этого: https://dev.mysql.com/doc /connector-python/en/connector-python-example-cursor-transaction.html
Найденный проблемой, чтобы быть, когда дата была назначена до 31.12.9999, вероятно, к большому, чтобы десятичное число обработало. Измененный от десятичного числа до плавания и каждой вещи работает как очарование.
В целом преобразование даты к числовому или строке, для выполнения операций даты на нем, очень неэффективно. (Преобразования относительно интенсивны, как обработки строк.) Намного лучше придерживаться просто функций даты.
Пример, который Вы даете, (я верю) снимать часть времени DateTime, следующее делает это без издержек преобразований...
DATEADD(DAY, DATEDIFF(DAY, 0, <mydate>), 0)
Это должно также избежать переполнения arithmentic...