如何解决如何插入数据库mysql解决?
如何将文件数据插入到mysql表中?
代码:
import pymysql.cursors
import pymysql as MySQLdb
import pymysql
from Bio import SeqIO
try:
conexao = MySQLdb.connect(host="localhost",user="root",passwd="xxx",db="db_teste")
print("conectado")
print(conexao)
except:
print("Não conectado")
for item in SeqIO.parse('seqteste.txt','fasta'):
dados = print('>{}\t{}'.format(str(item.description).replace('|','\t'),item.seq),)
with conexao:
with conexao.cursor() as cursor:
sql = "INSERT INTO `tabelateste` (`id`,`id_name`,`host`,`organism`,`seq`) VALUES(1,%s,%s)"
cursor.execute(sql,(dados,dados,))
conexao.commit()
错误:
pymysql.err.OperationalError: (1136,"Column count doesn't match value count at row 1")
我们的:
sql = "INSERT INTO `tabelateste` (`id`,`seq`) VALUES(%s,dados))
conexao.commit()
error:
line 125,in mogrify
query = query % self._escape_args(args,conn)
TypeError: not enough arguments for format string
如何解决这个错误并且能够在mysqldb表中插入数据?
我的序列:
>gb:KX262887|Organism:Zika virus|Strain Name:103451|Segment:null|Subtype:Asian|Host:Human
GTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAACAGTATCAACAG
GTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAAAAAAGAAATCCGGAGGATTCC
>gb:KX262887|Organism:Zika virus|Strain Name:103451|Segment:null|Subtype:Asian|Host:Human
GTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAACAGTATCAACAG
GTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAAAAAAGAAATCCGGAGGATTCC
>gb:KX262887|Organism:Zika virus|Strain Name:103451|Segment:null|Subtype:Asian|Host:Human
GTTGTTGATCTGTGTGAATCAGACTGCGACAGTTCGAGTTTGAAGCGAAAGCTAGCAACAGTATCAACAG
GTTTTATTTTGGATTTGGAAACGAGAGTTTCTGGTCATGAAAAACCCAAAAAAGAAATCCGGAGGATTCC
预期退出输出:
mysqldb
id id_name host organism seq
1 gb:KX262887 Human Zika Virus aatgtgttt
解决了吗?
解决方法
您必须仔细匹配列、占位符和值,以便每个列都有一个相同的编号:
sql = "INSERT INTO `tabelateste` (`id`,`id_name`,`host`,`organism`,`seq`) VALUES(%s,%s,%s)"
cursor.execute(sql,(dados,dados,dados))
conexao.commit()
注意现在如何在元组中指定 5 个列、5 个占位符和 5 个绑定。你有一个额外的 %s
。
概念上你想做的是:
(column_name,...) <-- Columns specified
|
v
( %s,... ) <-- Placeholders specified
|
v
(bind_value,... ) <-- Binding on execute()
请注意,这些必须完全以 1:1:1 的比例相关。任何不匹配都会导致您看到的错误。
,改变:
for item in SeqIO.parse('seqteste.txt','fasta'):
dados = print('>{}\t{}'.format(str(item.description).replace('|','\t'),item.seq),)
进入
import re
cnt = 0
for item in SeqIO.parse('seqteste.txt','fasta'):
cnt += 1
s=(str((item.description).strip('')))
pattern_id = "(.*?)\|Organism"
pattern_host = "Host:(.*.)"
pattern_org = "Organism:(.*?)\|Strain"
ids= re.search(pattern_id,s).group(1)
host = re.search(pattern_host,s).group(1)
org = re.search(pattern_org,s).group(1)
dados = [str(cnt),ids,host,org,str(item.seq)]
和:
cursor.execute(sql,dados))
与:
cursor.execute(sql,(dados[0],dados[1],dados[2],dados[3],dados[4]))
让我知道它的行为,我没有你的数据库,无法测试我的代码
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。