] Неверный синтаксис рядом с '_283846_2019'. (102) (SQLExecDirectW) ") - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно подключить базу данных sql к python, чтобы я мог добавлять новые пользовательские данные через python.

Я пробовал преобразование int, которое ставит меня перед дальнейшей проблемой набора данных нулевых типов.Я пробовал установить кронштейн.Это не работает.

import os
import datetime
import pyodbc
import sqlite3


file_open = open("filenames.txt","r")

path = 'C:\\Users\\Timble\\Desktop\\Face_recognition\\user-id_filenames\\'
flag_loc = 1
flag_proc = 0
flag_vis = 0
file_read_lines = file_open.readlines()
for line in file_read_lines:
    for character in line:
        if character == "_":
            details = line.split("_")
            now = datetime.datetime.now()
            name = line
            print("name:", name)                                                    #col-3
            print("type of name:", type(name))
            user_id = int(details[1])
            print("user_id:", details[1])                                             #col-2
            print("type of user_id:", type(user_id))
            date = details[2]
            print("date on which photo is taken:", details[2])                           #col-4
            print("type of data:",type(details[2]))
            now = now.strftime("%Y-%m-%d %H:%M:%S")
            print("Current date and time: ", now)                                 #col-6
            print("type of current date:", type(now))
            path2 = path + details[1]
            if os.path.exists(path2):
                print(path2)
            else:
                os.makedirs(path2)
            #break
            date = str(date)
            print("type of date", type(date))
            user_id = str(user_id)
            print("type of user_id", type(user_id))
            name = str(name)
            print("type of name",type(name))
            now = str(now)
            print("type of now", type(now))
            flag_loc = str(flag_loc)
            print("type loc flag", type(flag_loc))
            flag_proc = str(flag_proc)
            print("type proc flag", type(flag_proc))
            flag_vis = str(flag_vis)
            print("type vis flag", type(flag_vis))
            conn = pyodbc.connect(
                 "DRIVER={SQl Server};"
                 "server=DESKTOP-3ORBD3I\MSSQL;"
                 "database=TimbleSecuritySystem;"
                 "uid=sa;"
                 "pwd=P@ssword")
            cur = conn.cursor()
            sqlInsertUser = "Insert Into retraining (date, user_id, image_name,location_flagged, processing_flagged, insert_date, visible)Values( "+ date + " , " + user_id + " , " + name + " , " + flag_loc + " , " + flag_proc + " , " + now + " , " + flag_vis + " )"
            print(sqlInsertUser)
            cur.execute(sqlInsertUser)
            conn.commit()
            break
file_open.close()

Фактические результаты говорят мне, что print (sqlInsertUser) печатает все правильные значения.Я ожидаю, что команда execute будет работать и добавлены данные sql.

1 Ответ

1 голос
/ 03 июля 2019

Эта строка является проблемой:

 sqlInsertUser = "Insert Into retraining (date, user_id, image_name,location_flagged, processing_flagged, insert_date, visible)Values( "+ date + " , " + user_id + " , " + name + " , " + flag_loc + " , " + flag_proc + " , " + now + " , " + flag_vis + " )"

Например, если name содержит недопустимые символы, например, "[" или "]", то вызов execute завершится неудачно, потому что строка nameне правильно закрыт.(Он должен быть заключен в пару кавычек)

Вы можете использовать поддержку подстановки параметров в pyodbc, например:

 sqlInsertUser = "Insert Into retraining (date, user_id, 
     image_name, location_flagged, processing_flagged, insert_date, 
     visible) Values (?,?,?,?,?,?,?)"

, затем выполнить

cur.execute(sqlInsertUser, date, user_id, name, flag_loc, flag_proc, now, flag_vis)

(Мой примерприведенный выше код не протестирован. Возможно, вам придется исправить некоторые синтаксические ошибки)

Подробнее о синтаксисе см. https://www.python.org/dev/peps/pep-0249/#paramstyle или https://github.com/mkleehammer/pyodbc/wiki/Cursor

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