Рассмотрим параметризацию , рекомендуемый и рекомендуемый наилучший в отрасли подход для предотвращения внедрения SQL-кода злоумышленниками; заключать в кавычки и специальные символы, которые могут помешать выполнению запроса; и нечитаемый / не поддерживаемый код, когда данные смешиваются с кодом.
# PREPARED STATEMENT (ALL PLACEHOLDERS USING UNQUOTED %s PLACEHOLDERS, NO DATA)
sql = """INSERT INTO LSU.Student (Semail, Spassword, Sname, Sage, Sgender, Smajor, Sstreet, Szipcode)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
for a, b, c, d, e ,f, g, h in zip(df_stu['Email'], df_stu['Password'], df_stu['Full Name'],
df_stu['Age'], df_stu['Gender'], df_stu['Major'],
df_stu['Street'], df_stu['Zip']):
# QUERY EXECUTION
cursor.execute(sql, (a, b, c, d, e, f, g, h))
Даже рассмотрим executemany
, используя метод pandas DataFrame.values , поскольку кажется, что вы выполняете итерацию из фрейма данных. Это позволяет избежать циклов for
и zip
:
# PREPARED STATEMENT
sql = """INSERT INTO LSU.Student (Semail, Spassword, Sname, Sage, Sgender, Smajor, Sstreet, Szipcode)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
# EXECUTE PARAMETERIZED QUERY
sql_cols = ['Email', 'Password', 'Full Name', 'Age', 'Gender', 'Major', 'Street', 'Zip']
cursor.executemany(sql, df_stu[sql_cols].values.tolist())
conn.commit()