我想将包含数字和字母的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的新手,有人可以告诉我如何以表格格式获取输出吗?
答案 0 :(得分:1)
您没有说是哪一行引发了异常,但我想这就是这一行:
c.execute("INSERT INTO RecordTWO (GST) VALUES(?)", (c))
您到底要插入什么数据库?在继续阅读之前,请花一些时间仔细查看此行。看看是否可以解决。
以防万一,请使用变量c
中的游标尝试将游标本身插入数据库。那不可能做您想要的。您可能已经使用c
为变量c=getgst(s)
分配了一个值,但是在创建游标并将其分配给c
时覆盖了该值。
您陷入了陷阱,因为您为变量使用了单字母名称。不要这样返回并提供变量a
,b
,c
和s
的名称,以更好地描述它们所拥有的值。是的,输入的内容要多一些,但是清晰的名称使您的代码更易于阅读。
假设我们将光标变量重命名为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。