actually i’m new to learning python and mysql database i have table named TABEL_NILAI in database like this:
id auto_increment primary key NILAI_TRUST FLOAT NAMA_ALAT VARCHAR(10) -------------------------- |ID|NILAI_TRUST|NAMA_ALAT| -------------------------- |1 | 0.12 | ALAT1 | -------------------------- |2 | 0.34 | ALAT2 | -------------------------- |3 | 0.54 | ALAT3 | --------------------------
So i want to Retrieve value NILAI_TRUST from TABEL_NILAI and i want to do some math. here’s code i was made:
kursor = db.cursor()
kursor.execute("SELECT NILAI_TRUST FROM TABEL_NILAI")
hasil = kursor.fetchall()
def hitung_standardeviasi():
    #input data
    TrustValue= x().split(',')
    for i in range(len(TrustValue)):
        TrustValue[i]= int(TrustValue[i])
    jumlah=0
    #Average
    for i in range(len(TrustValue))
        jumlah += TrustValue[i]
    ratarata = jumlah/len(TrustValue)
    total=0
    #sigma
    for i in range(len(TrustValue))
        hitung = (TrustValue[i]-ratarata)**2
        total += hitung
    sigma = total/(len(TrustValue)-1)
    #standardeviasi
    standardeviasi = math.sqrt(sigma)
    print(standardeviasi)
for x in hasil:
    hitung_standardeviasi()
And giving me error like:
Traceback (most recent call last):
   File "/home/lihat_tabel.py", line 60, in <module>
        hitung_standardeviasi()
   File "/home/lihat_tabel.py", line 24, in hitung_standardiviasi
        Trustvalue = x().split(',')
TypeError: 'tuple' object is not callable
so how to retrieve value into python variable in right ways. Please help:(
Advertisement
Answer
The query
kursor.execute("SELECT NILAI_TRUST FROM TABEL_NILAI")
will return a iterable of tuples, for example like this:
[(0.12,), (0.34,), (0.54,)]
So this line
TrustValue= x().split(',')
has two problems:
- x is a tuple, so it can’t be called like x()
- x is not a string, so it doesn’t have a split method
It looks like you want to make TrustValue a list of the int values of each result in the query.  In that case this for loop is unnecessary, because it will only it will make the code operate on a single result at a  time:
#  You don't need this
for x in hasil:
    hitung_standardeviasi()
The hitung_standardeviasi function could begin like this:
def hitung_standardeviasi():
    #input data
    results = list(hasil)
    TrustValue= []
    for i in range(len(results)):
        TrustValue[i]= int(results[i][0])
    jumlah=0 
We can make this code a more readable by looping over the results directly instead of using the for i in range(len(collection)): idiom, which is often unnecessary in Python:
def hitung_standardeviasi():
    #input data
    TrustValue= []
    for (result,) in hasil:
        TrustValue.append(int(result))
    jumlah=0
Using a list comprehension is even more Pythonic:
def hitung_standardeviasi():
    #input data
    TrustValue = [int(result) for (result,) in hasil]
    jumlah=0 
You might want to look at the sum built-in function and the statistics module too.
