' [hy004] [Microsoft] [SQL Server的ODBC驱动程序17]无效SQL数据类型(0)(SQLBINDPARAMETER)'问题
就像标题IM在这条线上有这个问题一样。
mycursor.execute("UPDATE slot SET plaka=?,girisTarih=?,girisSaat=?,musaitlik=?, WHERE slotAd=?",plaka1,girisTarih,girisSaat,musaitlik,slotAd)
musaitlik = true/false(0-1) slotad = 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-L3245F\SQLEXPRESS;'
'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)
Like on title Im having this problem on this line.
mycursor.execute("UPDATE slot SET plaka=?,girisTarih=?,girisSaat=?,musaitlik=?, WHERE slotAd=?",plaka1,girisTarih,girisSaat,musaitlik,slotAd)
musaitlik = true/false(0-1)
slotAd = 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-L3245F\SQLEXPRESS;'
'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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试
而不是
解决我的问题。
Try
instead of
This solved my problem.
问题归结为您在传递
fetchone
的返回时试图对序列/迭代对象进行参数化的尝试,该对象不返回一个 scalar 值,而是一个 sequence (即)值。如果仅返回查询中的一列,则您将具有一个元素的序列/迭代。根据Python的DB-API规范(PEP 249),其中
pyodbc
在很大程度上坚持,fetchone
被指定为返回(添加了强调):因此,只需在参数化之前对特定的第一列值进行序列/迭代索引的第一项,它仅期望标量:
per pyodbc docs,
fetchval
所建议的表征为:可以在引擎盖下运行
fetchall()[0] [0] [0]
fetchone()[0] 。Issue comes down to your attempt to parameterize a sequence/iterable object when passing the return of
fetchone
which does not return one scalar value but one sequence (i.e., row) of values. If only one column from query is returned then you have a sequence/iterable of one element.Per the Python's DB-API Specification (PEP 249) of which
pyodbc
largely adheres to,fetchone
is specified to return (emphasis added):Therefore, simply index the first item of sequence/iterable for specific first column value before parameterizing which expects only scalars:
Per pyodbc docs,
fetchval
as suggested is characterized as a:which may run either
fetchall()[0][0]
orfetchone()[0]
under the hood.