NameError:未定义名称“convertToBinaryData”
Posted
技术标签:
【中文标题】NameError:未定义名称“convertToBinaryData”【英文标题】:NameError: name 'convertToBinaryData' is not defined 【发布时间】:2021-03-07 14:40:22 【问题描述】:我无法弄清楚我收到错误的原因:NameError: name 'convertToBinaryData' is not defined,有什么想法吗?
我认为函数 convertToBinaryData 的声明是在正确的地方,虽然我不知道如何解决这个问题
Traceback(最近一次调用最后一次): 文件“C:\Users\USER............\TestDB.py”,第 20 行,在 db.insertRawEcg(1, 2, "C:\Users\USER\Desktop\...\...\...\ecgexample.jpg", True, True, 0.08, 0.08, True, 0.04, 0.2, 0.04 , 0.2, 文件“C:\Users\USER\Desktop.........\DBConnect.py”,第 146 行,在 insertRawEcg scanPic = convertToBinaryData(EcgScan) [0.2s 完成,退出码 1]
DBConnect.py
import mysql.connector
import datetime
import sys
class DBConnect:
config =
'user': 'root',
'password': 'root',
'host': 'localhost',
'database': 'EcgDB',
'raise_on_warnings': True,
examOccurence = datetime.datetime.now()
currDate = examOccurence.strftime("%Y/%m/%d")
currTime = examOccurence.strftime("%H:%M:%S")
link = mysql.connector.connect(**config) #Establishing connection
mycourser = link.cursor(buffered=True) #Creating cursor object to allow execution of SQL statements
MeasurementsTable = """CREATE TABLE MeasurementsOfPatient(
ExamID int,
EcgID int,
ExamDate date,
ExamTime time,
PRIMARY KEY (ExamID, EcgID)
)"""
PatientsTable = """CREATE TABLE patients (
PatientID int NOT NULL AUTO_INCREMENT,
GroupID int,
ExamID int,
Age int,
Gender char(1) NOT NULL,
MedBackground VARCHAR(255),
PRIMARY KEY (PatientID),
FOREIGN KEY (ExamID)
REFERENCES MeasurementsOfPatient(ExamID)
ON UPDATE CASCADE,
FOREIGN KEY (GroupID)
REFERENCES users(GroupID)
ON UPDATE CASCADE
)"""
UsersTable = """CREATE TABLE users (
UserName VARCHAR(255),
PassWord VARCHAR(255),
GroupID int,
PRIMARY KEY (UserName, PassWord),
UNIQUE (GroupID)
)"""
EcgRawDataTable = """CREATE TABLE EcgRawData (
ExamID int,
EcgID int,
EcgScan MEDIUMBLOB,
Lead boolean,
Pwave boolean,
PXlength DECIMAL(3, 2),
PwaveAvg DECIMAL(3, 2),
Qwave boolean,
QXlength DECIMAL(3, 2),
QYlength DECIMAL(3, 2),
QwaveAvgX DECIMAL(3, 2),
QwaveAvgY DECIMAL(3, 2),
Swave boolean,
SXlength DECIMAL(3, 2),
SYlength DECIMAL(3, 2),
SwaveAvgX DECIMAL(3, 2),
SwaveAvgY DECIMAL(3, 2),
Twave boolean,
Rwave boolean,
RwaveAvg DECIMAL(3, 2),
PRinterval DECIMAL(3, 2),
QRSinterval DECIMAL(3, 2),
RRinterval DECIMAL(3, 2),
HeartRate int,
RespiratoryRate int,
HeartRythem VARCHAR(255),
FOREIGN KEY (ExamID, EcgID)
REFERENCES MeasurementsOfPatient(ExamID, EcgID)
ON UPDATE CASCADE
)"""
EcgParamsTable = """CREATE TABLE EcgParams(
ExamID int,
EcgID int,
EcgScan MEDIUMBLOB,
Lead boolean,
Pwave boolean,
PXlength DECIMAL(3, 2),
PwaveAvg DECIMAL(3, 2),
Qwave boolean,
QXlength DECIMAL(3, 2),
QYlength DECIMAL(3, 2),
QwaveAvgX DECIMAL(3, 2),
QwaveAvgY DECIMAL(3, 2),
Swave boolean,
SXlength DECIMAL(3, 2),
SYlength DECIMAL(3, 2),
SwaveAvgX DECIMAL(3, 2),
SwaveAvgY DECIMAL(3, 2),
Twave boolean,
Rwave boolean,
RwaveAvg DECIMAL(3, 2),
PRinterval DECIMAL(3, 2),
QRSinterval DECIMAL(3, 2),
RRinterval DECIMAL(3, 2),
HeartRate int,
RespiratoryRate int,
HeartRythem VARCHAR(255),
FOREIGN KEY (ExamID, EcgID)
REFERENCES MeasurementsOfPatient(ExamID, EcgID)
ON UPDATE CASCADE
)"""
def convertToBinaryData(self, filename):
#Convert digital data to binary format
with open(filename, 'rb') as file:
binaryData = file.read()
return binaryData
def write_file(self, data, filename):
#convert binary data to proper format and write it on hard disk
with open(filename, 'wb') as file:
file.write(data)
def insertRawEcg(self, ExamID, EcgID, EcgScan, Lead, Pwave, PXlength, PwaveAvg,
Qwave, QXlength, QYlength, QwaveAvgX, QwaveAvgY, Swave,
SXlength, SYlength, SwaveAvgX, SwaveAvgY, Twave, Rwave,
RwaveAvg, PRinterval, QRSinterval, RRinterval, HeartRate,
RespiratoryRate, HeartRythem):
insertScan = """INSERT INTO EcgRawData VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
scanPic = convertToBinaryData(EcgScan)
dataTuple = (ExamID, EcgID, scanPic, Lead, Pwave, PXlength, PwaveAvg,
Qwave, QXlength, QYlength, QwaveAvgX, QwaveAvgY, Swave,
SXlength, SYlength, SwaveAvgX, SwaveAvgY, Twave, Rwave,
RwaveAvg, PRinterval, QRSinterval, RRinterval, HeartRate,
RespiratoryRate, HeartRythem)
cursor.execute(insertScan, dataTuple)
link.commit()
print("Raw data inserted successfully to DB")
TestDB.py
from DBConnect import DBConnect
db = DBConnect()
db.insertRawEcg(1, 2, "C:\\Users\\USER\\Desktop\\...\\...\\...\\ecgexample.jpg", True, True, 0.08, 0.08, True, 0.04, 0.2, 0.04, 0.2, True, 1, 0.5, 1, 0.5, True, True,0.08, 1, 2, 4, 60, 13, "NSR")
【问题讨论】:
【参考方案1】:使用scanPic = self.convertToBinaryData(EcgScan)
,因为convertToBinaryData
是一个类方法。
【讨论】:
谢谢,但现在我得到了 - NameError: name 'mycursor' is not defined 用在什么地方?在下面的代码行中有一个拼写错误。mycourser = link.cursor(buffered=True) #Creating cursor object to allow execution of SQL statements
以上是关于NameError:未定义名称“convertToBinaryData”的主要内容,如果未能解决你的问题,请参考以下文章
Buildozer:NameError:未定义名称'functools'