"[HY004] [Microsoft][SQL Server 的 ODBC 驱动程序 17]无效的 SQL 数据类型 (0) (SQLBindParameter)"问题



就像标题一样,我在这一行有这个问题。

mycursor.execute("UPDATE slot SET plaka=?,girisTarih=?,girisSaat=?,musaitlik=?,  WHERE slotAd=?",plaka1,girisTarih,girisSaat,musaitlik,slotAd)

穆赛特里克 = 真/假(0-1) 插槽广告 = A1

import cv2
from matplotlib import pyplot as plt
import easyocr
import PIL.Image
import PIL.ImageTk
import os
import pyodbc
import datetime
import numpy as np
import imutils
import random
conn = pyodbc.connect('Driver={SQL Server};'
'Server=DESKTOP-L3245FSQLEXPRESS;'
'Database=CarPark;'
'Trusted_Connection=yes;''autocommit=True')

def giris(plaka1):
global plaka

print("girdi")
mycursor = conn.cursor()
mycursor.execute("SELECT plaka from slot where plaka=?",(plaka1))
kontrol=False
for x in mycursor:
if (x[0]==plaka1):
kontrol=True
if(kontrol):
print("Bu Araç Otoparktadır")
else:
mycursor = conn.cursor()
girisTarih = datetime.datetime.now().strftime("%d.%m.%Y")
girisSaat = datetime.datetime.now().strftime("%H:%M")
musaitlik = 0
mycursor.execute("SELECT slotAd FROM slot WHERE musaitlik='1'")
slotAd = mycursor.fetchone()
mycursor.execute("UPDATE slot SET plaka=?,girisTarih=?,girisSaat=?,musaitlik=?,  WHERE slotAd=?",plaka1,girisTarih,girisSaat,musaitlik,slotAd)
conn.commit()
print(mycursor.rowcount, "Giriş Yapildi.")
plaka=""
tantuni = "52 AT 533"
giris(tantuni)

尝试

slotAd = mycursor.fetchval() 

而不是

slotAd = mycursor.fetchone(). 

这解决了我的问题。

问题归结为您在传递fetchone返回时尝试参数化序列/可迭代对象,该返回不返回一个标量值,而是返回一个值序列(即行)。如果只返回查询中的一列,则您有一个元素的序列/可迭代对象。

根据 Python 的 DB-API 规范 (PEP 249),其中pyodbc基本遵守,fetchone被指定返回(强调添加):

提取查询结果集的下一行,返回单个序列,如果没有更多数据可用,则返回 None。

因此,只需在参数化之前为特定的第一列值索引序列/可迭代的第一项,该参数只需要标量:

mycursor.execute("SELECT slotAd FROM slot WHERE musaitlik='1'")
slotAd = mycursor.fetchone()[0]
mycursor.execute(
"UPDATE slot SET plaka=?, girisTarih=?, girisSaat=?, musaitlik=? WHERE slotAd=?",
plaka1, girisTarih, girisSaat, musaitlik, slotAd
)
conn.commit()

根据 pyodbc 文档,建议fetchval特征为:

如果有结果,方便方法返回第一行的第一列,否则返回 None。

它可以fetchall()[0][0]运行,也可以在引擎盖下fetchone()[0]运行。

相关内容

  • 没有找到相关文章

最新更新