簡體   English   中英

]“ _ 283846_2019”附近的語法不正確。 (102)(SQLExecDirectW)“)

[英]]Incorrect syntax near '_283846_2019'. (102) (SQLExecDirectW)")

我必須將sql數據庫連接到python,以便可以通過python添加新的用戶數據。

我嘗試了int轉換,這使我進一步陷入了null類型數據集的麻煩。 我已經嘗試過放置支架。 沒用

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數據。

這行是問題所在:

 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/#paramstylehttps://github.com/mkleehammer/pyodbc/wiki/Cursor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM