Добавить данные в MySQL, используя python - PullRequest
0 голосов
/ 28 августа 2018

Я хочу добавить данные в базу данных MySQL, используя python 2.7 в CentOS.

Вот мой код,

# Sample data
clusterList =['a', 'w', 'e', 'r']
versionList = [1,2,3,4]
portalDomain = ['aa', 'bb', 'cc', 'dd']
portalDomains = ['p1', 'p2', 'p3', 'p4']

db = mysql.connect(host="mydb.com", user="nod", passwd="", db="noc")
cur = db.cursor()

for i in range(len(portalDomains)):
print("Adding data...")
query = "INSERT INTO test_score (portalCluster,portalVersion,portalDomain) values 
    ('%s', %s, '%s')" 
    % (clusterList[i], versionList[i], portalDomains[i])

cur.execute(query)
db.commit()

Я получаю ошибку ниже,

_mysql_exceptions.ProgrammingError: (1064, "You have an error in your 
SQL syntax; check the manual that corresponds to your MySQL server version for 
the right syntax to use near 'release-20180822-16, 'portal.xyv.com')' at line 1")

Я могу вручную данные в дБ,

 cur.execute ("INSERT INTO test_release_score 
(portalCluster,portalVersion,portalDomain) values ('%s', %s, '%s')" 
% ("1122q", 7, "2wq2w"))

Но, когда я изменяю это на что-то вроде ниже

# change 7 to 'qa22'

cur.execute ("INSERT INTO test_release_score 
(portalCluster,portalVersion,portalDomain) values ('%s', %s, '%s')" % 
("1122q", "qa12", "2wq2w"))

Я получаю ошибку:

_mysql_exceptions.OperationalError: (1054, "Unknown column 'qa12' in 'field list'")

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 августа 2018

Вместо интерполяции значений в запрос с помощью оператора % используйте заполнители и параметры запроса:

query = ("INSERT INTO test_score (portalCluster,portalVersion,portalDomain) "
         "VALUES (%s, %s, %s)") 
cur.execute(query, (clusterList[i], versionList[i], portalDomains[i]))

Таким образом, драйвер базы данных будет выполнять необходимое экранирование / цитирование, что также предотвращает уязвимости SQL-инъекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...