得到ValueError:参数是我尝试所有数据类型的不受支持的类型

时间:2019-07-16 11:08:35

标签: python database sqlite function spyder

我想将包含数字和字母的GST号码以及电子邮件ID一起存储到数据库中,但它向我显示ValueError: parameters are of unsupported type。在这里,我只尝试了手机号码,但效果很好,但是在使用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的新手,有人可以告诉我如何以表格格式获取输出吗?

1 个答案:

答案 0 :(得分:1)

您没有说是哪一行引发了异常,但我想这就是这一行:

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

您到底要插入什么数据库?在继续阅读之前,请花一些时间仔细查看此行。看看是否可以解决。

以防万一,请使用变量c中的游标尝试将游标本身插入数据库。那不可能做您想要的。您可能已经使用c为变量c=getgst(s)分配了一个值,但是在创建游标并将其分配给c时覆盖了该值。

您陷入了陷阱,因为您为变量使用了单字母名称。不要这样返回并提供变量abcs的名称,以更好地描述它们所拥有的值。是的,输入的内容要多一些,但是清晰的名称使您的代码更易于阅读。

假设我们将光标变量重命名为db_cursor。在下面的行中发现错误比在上面的行中发现错误要容易得多?

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

您还需要进行其他更改。当您编写(c)时,或者在上面的示例中,(db_cursor)时,您似乎正在尝试制作一个包含单个值的元组。 execute方法的第二个参数必须是一个元组(列表也可以在这里使用)。但是,(c)不是1元组,它只是括号中的一个表达式。为了使其成为一个元组,请在)前加上一个逗号:

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

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