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