ich eine Klasse, um Daten zu erzeugen:Python bekommt jedes Mal eine neue Instanz erstellen
class dataGen():
#class to generate data.
def firstName():
firstName = 'Storm' + str(timeGen.timeGen())
return firstName
def lastName():
lastName = 'Trooper' + str(timeGen.timeGen())
return lastName
def randString():
rint = random.randint(1,20)
r4ndString = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(rint))
return r4ndString
def email():
EmailA = dataGen.randString()
EmailB = dataGen.randString()
items = ['.com','.net','.org']
tld = random.choice(items)
return str(EmailA) + '@' + str(EmailB) + str(tld)
def empid(size=20, chars=string.ascii_uppercase + string.ascii_lowercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def ssnGen():
ssnGenD = random.randint(100000000,999999999)
return ssnGenD
Klasse macht SQL-Aufruf:
class sqlConn():
#Class to handle all SQL connections
def realEmail(cEmail):
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=Dev1SQL1;DATABASE=TimeCurrent;Trusted_Connection=yes')
cursor = cnxn.cursor()
sql = 'exec tbl.usp_Lookup_Email "%s"' % cEmail
cursor.execute(sql)
data = cursor.fetchall()
return(data)
def realEmpID(cEmpID):
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=Dev1SQL1;DATABASE=TimeCurrent;Trusted_Connection=yes')
cursor = cnxn.cursor()
sql = 'exec tbl.usp_Lookup_EmplID "%s"' % cEmpID
cursor.execute(sql)
data = cursor.fetchall()
return(data)
def realEmpName(cFName, cLName):
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=Dev1SQL1;DATABASE=TimeCurrent;Trusted_Connection=yes')
cursor = cnxn.cursor()
value = (cFName, cLName)
sql = 'exec tbl.usp_Lookup_Name "%s", "%s"' % value
cursor.execute(sql)
data = cursor.fetchall()
return(data)
def realSSN(cSSN):
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=Dev1SQL1;DATABASE=TimeCurrent;Trusted_Connection=yes')
cursor = cnxn.cursor()
sql = ' exec tbl.usp_Lookup_SSN "%s"' % cSSN
cursor.execute(sql)
data = cursor.fetchall()
return(data)
... und ich eine Klasse, die anruft, basierend auf den Ergebnissen meiner SQL-Abfrage.
def deID(HOLDERLIST):
#Takes in the holderList from holderClass, checks aganst the database to see if the fakeFeild for each of the values has data,
#If the feild does not return none, it uses that data. If it is none, then it generates new data.
for item in HOLDERLIST:
for idx, lis in enumerate(item):
if idx == 0:
fName = item[0]
lName = item[1]
name = sqlConn.realEmpName(fName, lName)
if name == None:
item[0] = dataGen.firstName()
item[1] = dataGen.lastName()
else:
item[0] = name[0][0]
item[1] = name[0][1]
elif idx == 2:
SSN = sqlConn.realSSN(item[idx])
if SSN == None:
item[idx] = dataGen.ssnGen()
else:
item[idx] = SSN
elif idx == 3:
email = sqlConn.realEmail(item[idx])
if email == None:
item[idx] = dataGen.email()
else:
item[idx] = email
print('Holderlist deID')
return(HOLDERLIST)
Meine Hauptschleife
def main():
datagenInstance = dataGen()
SQLConnInstance = sqlConn()
CLIENT, filename, FILESTRUCT = selectFile()
PARSED = parse(filename)
HOLDERLIST = holderClass(PARSED, FILESTRUCT)
deIDedData = deID(HOLDERLIST)
deIDedFile = merge(PARSED, deIDedData, FILESTRUCT)
fileExport(filename, deIDedFile)
if __name__ == '__main__':
main()
HOLDERLIST ist nur eine CSV-Datei, die in eine Liste von 4 Strings analysiert wird. Das Problem, das ich habe, ist, dass die SQL-Verbindungsklasse und die DataGen-Klasse nicht jedes Mal neue Aufrufe vornehmen. Jedes Mal, wenn die Schleife ausgeführt wird, sollte eine neue Instanz der beiden oben genannten Klassen erstellt werden. Ich weiß, dass ich in Sprachen wie C# und C++ neue an der Vorderseite des Aufrufs anbringen kann, um die Sprache zu zwingen, bei jedem Aufruf eine neue Instanz zu erstellen. Ich habe die Literatur über die Verwendung von Dingen wie neue in Python gelesen, aber das scheint in der Klassendeklaration platziert werden, und ich verstehe nicht wirklich Python-Klasse Dekorationen so gut.
Warum sind irgendwelche dieser Dinge Klassen? Sie erstellen keine einzige Instanz dieser Klassen an einer beliebigen Stelle, und keine der Methoden würde einen Instanzstatus verwenden oder überhaupt an einer Instanz arbeiten. – user2357112
Sorry, habe vergessen, meine Hauptschleife zu verknüpfen. Die Frage wurde bearbeitet. –