Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表框值中选择给定WHERE子句的数据库中的数据_Python_Sql_Python 3.x_Postgresql_Tkinter - Fatal编程技术网

Python 从列表框值中选择给定WHERE子句的数据库中的数据

Python 从列表框值中选择给定WHERE子句的数据库中的数据,python,sql,python-3.x,postgresql,tkinter,Python,Sql,Python 3.x,Postgresql,Tkinter,我正在尝试检索给定特定姓氏的关联数据。但是,该姓氏与名和分隔符逗号一起存储在列表框中。因此,首先通过光标选择从列表框中检索名称,通过对其余名称进行分区,只使用姓氏进行搜索: lastname, sep, firstname = (self.patient_list.get(self.patient_list.curselection())).partition(',') 完成后,我将尝试获取所选姓氏的数据行打印输出。然而,我遇到了一个问题: TypeError: argument 1 mus

我正在尝试检索给定特定姓氏的关联数据。但是,该姓氏与名和分隔符逗号一起存储在列表框中。因此,首先通过光标选择从列表框中检索名称,通过对其余名称进行分区,只使用姓氏进行搜索:

lastname, sep, firstname = (self.patient_list.get(self.patient_list.curselection())).partition(',') 
完成后,我将尝试获取所选姓氏的数据行打印输出。然而,我遇到了一个问题:

TypeError: argument 1 must be a string or unicode object: got tuple instead
我想知道如何处理这个问题。我尝试了一些解决方案,例如
load\u query
中参数内的
tuple
函数,以及
lastname
上的
str
,但它是一个字符串

我还想知道是否有必要用这种方法从PostgreSQL数据库中进行选择。我可以尝试将listbox元素绑定到数据库中的一行数据吗?或者避免对元素进行分区,因为这可能会带来麻烦

完整代码:

        def load_profile(self, event):
            conn = pg.connect(user='postgres',
                                    password='123!',
                                    host='localhost',
                                    port='5430',
                                    database='carepartnerdb')
            
            cur = conn.cursor()
    
            #gets lastname from listbox, removes all else past the comma
            #used to associate to DB 
            lastname, sep, firstname = (self.patient_list.get(self.patient_list.curselection())).partition(',')
    
            load_query = (""" SELECT * FROM profiles_table WHERE patient_lastname=%s """, lastname) 
            cur.execute(load_query)
            conn.commit()
    
            #data = cur.fetchall()
            #print(data) 
    
            cur.close()
            conn.close()

load\u query
是一个
tuple
,因此
cur.execute(load\u query)
将引发异常,因为
execute()
需要一个字符串(查询字符串)作为第一个参数

您应该更改:

load_query = (""" SELECT * FROM profiles_table WHERE patient_lastname=%s """, lastname) 
cur.execute(load_query)
致:


另外,
SELECT
语句不需要
commit()。首先调用self.patient\u list.curseelection()
,并将结果保存到变量中。检查变量,看看它是否符合预期。然后,将结果传递给self.patient\u list.get。结果和你期望的一样吗?然后,调用
partitiion
,再次检查结果。其中一个步骤可能是做一些与您假设的不同的事情。这行得通吗
load\u query=“从配置文件\u表中选择*,其中患者\u lastname=%s”,(lastname),
,然后
cur.execute(load\u query)
或者它仍然是一个tupleNo它将不起作用。您可以通过
打印(键入(加载查询))
轻松验证它。因此,基本上,即使我们不说
()
,但值用逗号分隔,那么它是一个元组?
load_query = "SELECT * FROM profiles_table WHERE patient_lastname = %s" 
cur.execute(load_query, (lastname,))