Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 getting ValueError:参数的类型不受支持,我尝试了所有数据类型_Python_Database_Sqlite_Function_Spyder - Fatal编程技术网

Python getting ValueError:参数的类型不受支持,我尝试了所有数据类型

Python getting ValueError:参数的类型不受支持,我尝试了所有数据类型,python,database,sqlite,function,spyder,Python,Database,Sqlite,Function,Spyder,我想将包含数字和字母的GST号码以及电子邮件id一起存储到数据库中,但它向我显示ValueError:参数的类型不受支持。在这里,我只尝试了手机号码,它工作得很好,但在GST和电子邮件id的情况下却没有 import sqlite3 import re def getphonenumber(s): phonenumberregex=re.findall(r'\+\d\d\d\d\d\d\d\d\d\d\d\d|\d\d\d\d+-\d\d\d\d\d\d\d|\d\d\d\d\

我想将包含数字和字母的GST号码以及电子邮件id一起存储到数据库中,但它向我显示ValueError:参数的类型不受支持。在这里,我只尝试了手机号码,它工作得很好,但在GST和电子邮件id的情况下却没有

 import sqlite3


 import re


 def getphonenumber(s):

 phonenumberregex=re.findall(r'\+\d\d\d\d\d\d\d\d\d\d\d\d|\d\d\d\d+-\d\d\d\d\d\d\d|\d\d\d\d\d\d\d\d\d\d',line)

 if phonenumberregex:

  print(phonenumberregex)     

   return (phonenumberregex)

 def getemailid(s):

    emailidregex=re.findall(r'\S+@\S+',line)

  if emailidregex:

      print(emailidregex)

  return (emailidregex)



 def getgst(s):

 gstregex=re.findall(r'\d{2}[A-Z]{5}\d{4}[A-Z]{1}[A-Z\d]{1}[Z]{1}[A-Z\d]{1}',line)

 if gstregex:

    print(gstregex)  

 return (gstregex)



 with open('yesno.txt') as s:

    amountdata = s.readlines()

 for line in amountdata:

  if line.__contains__('Gst'):     

   c=getgst(s)

  if line.__contains__('Mob'):    

     a=getphonenumber(s)

  if line.__contains__('Email'): 

     b=getemailid(s) 

 s.close()  

 conn = sqlite3.connect('test3.db') 

 c = conn.cursor() 

 def create_table(): 

     c.execute('CREATE TABLE IF NOT EXISTS RecordTWO (gst STR)') 


 def data_entry(): 

     c.execute("INSERT INTO RecordTWO (GST) VALUES(?)",  (c))  


     conn.commit() 


 create_table() 

 data_entry() 


 def get_posts():

     with conn:

          c.execute("SELECT * FROM RecordTWO")

          print(c.fetchall())

 get_posts()

 print("Table created successfully")

我想在数据库中存储gst的值,其中包含字符和数字以及电子邮件id。另外,由于我是python新手,有人能告诉我如何以表格格式获取输出吗?

您不能说哪一行引发了异常,但我猜是这一行:

     c.execute("INSERT INTO RecordTWO (GST) VALUES(?)",  (c))  
你到底想在数据库中插入什么?在继续阅读之前,花一些时间仔细阅读这一行。看看你能不能弄明白

如果您想不出来,您可以使用变量c中的游标来尝试将游标本身插入数据库。这不太可能实现你的愿望。您可能已经使用c=getgsts为变量c指定了一个值,但在创建光标并将其指定给c时,您重写了该值

您陷入了这个陷阱,因为您对变量使用了单字母名称。不要这样做。返回并给出变量a、b、c和s的名称,以便更好地描述它们所包含的值。是的,它的输入稍微多了一点,但是清晰的名称使您的代码更容易阅读

假设我们将游标变量重命名为db_cursor。发现下面一行中的错误比发现上面一行中的错误容易多少

     db_cursor.execute("INSERT INTO RecordTWO (GST) VALUES(?)",  (db_cursor))  
你还得做一个改变。当您编写c时,或者在我上面的示例中,db_cursor,似乎您试图创建一个包含单个值的元组。execute方法的第二个参数需要是一个元组,列表在这里也可以使用。然而,c不是一个1元组,它只是一个括号中的表达式。要使其成为元组,请在


要以表格格式获取输出,请参阅此网站上的其他问题,例如。

代码格式。假设在执行插入查询时出现ValueError。除此之外,在数据输入中,变量c包含游标,因此可以调用c.execute而不会导致AttributeError,因此您试图将游标插入数据库。当您创建游标时,c=getgsts中以前的c值被覆盖:c=conn.cursor。我很确定,ValueError是由于第二个参数不是元组而执行的,因为缺少尾随逗号、列表或dict。相应的检入失败,最终引发错误。如果第二个参数的类型受支持,且内容不受支持,例如c,,我们将看到sqlite3.InterfaceError:Error绑定参数0-可能是不受支持的类型..@shmee:agree,答案已更新。我认为有必要明确说明这两个问题:如果我们只要求OP添加尾随逗号,他们可能会回复我们说我遇到了另一个错误,它不起作用或类似的错误。@shmee我仍然得到错误接口error:error binding参数0-可能是不受支持的类型。你能帮帮我吗,伙计,我还把c变量改成了d,在那里我存储了gst@Kartikaggarwal你真的把卢克关于变量名的建议牢记在心了,是吗P包含的返回值,如果未找到匹配项,则返回值为无,或者返回字符串列表。假设只找到一个匹配项,您可能必须将d[0]作为参数元组传递才能执行。但是,如果不了解输入文件,这几乎是猜测。
     db_cursor.execute("INSERT INTO RecordTWO (GST) VALUES(?)",  (db_cursor,))