MySQLdb._exceptions.ProgrammingError: not enough arguments for format string
MySQLdb._exceptions.ProgrammingError: not enough arguments for format string
我正在尝试获取一个字典列表,即工作公告板 API 中的 return,并将该数据插入到 SQL table 中我的一位队友访问。我 运行 遇到的问题是,当我 运行 我的脚本一次一个地阅读字典并将它们插入 MySQLDb Table 我在我遇到关于格式字符串参数不足的错误之前,通过一些 运行s。这对我来说意义不大,一方面是因为我缺乏经验,另一方面是因为我根据 len(dict) 设置了参数的数量。有什么我偏离轨道的想法吗?
我的代码:
#!/usr/bin/env python3
def refresh_remote(jobs=""):
import MySQLdb
dB = MySQLdb.connect("localhost","******", "******", "BoomTown")
cursor = dB.cursor()
cursor.execute("TRUNCATE TABLE remote_jobs");
for job in jobs:
placeholders = ', '.join(['%s'] * len(job))
columns = ', '.join(job.keys())
sql = "INSERT INTO remote_jobs ( %s ) VALUES ( %s )" % (columns, placeholders)
vls = []
for v in job.values():
try:
str(v).encode(encoding='utf-8').decode('ascii')
if str(v) == "":
v = 'NULL'
else:
v = str(v)
vls.append(v)
except UnicodeDecodeError:
pass
print(vls)
print(sql)
cursor.execute(sql, vls)
dB.close()
print("All done with remote jobs table")
if __name__ == '__main__':
"""
This will be our main guard which will import
gaurd our methods for dropping and refreshing the
tables in the SQL DB
"""
from getRemoteJobs import remote_jobs_get
"""
First we'll need to get remote jobs via the API
call to remotework, then we will send the data
as a list of dicts to refresh_remote to be put
into a SQL table
"""
remote_jobs = remote_jobs_get()
refresh_remote(remote_jobs)
错误:
Traceback (most recent call last):
File "/home/tulsaboomtown/.local/lib/python3.5/site-packages/MySQLdb/cursors.py", line 201, in execute
query = query % args
TypeError: not enough arguments for format string
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./refresh_jobs_db.py", line 49, in <module>
refresh_remote(remote_jobs)
File "./refresh_jobs_db.py", line 28, in refresh_remote
cursor.execute(sql, vls)
File "/home/tulsaboomtown/.local/lib/python3.5/site-packages/MySQLdb/cursors.py", line 203, in execute
raise ProgrammingError(str(m))
MySQLdb._exceptions.ProgrammingError: not enough arguments for format string
我看到我认为从我拥有的那些打印语句中得到的良好输出:
['Business Development Representative (BDR)', 'Brightback', 'full_time', '2021-03-09T21:42:29', 'USA Only', 'https://remotive.io/remote-jobs/business/business-development-representative-bdr-483643', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Customer Success Champion', 'Geckoboard', 'NULL', '2021-03-09T19:05:49', 'Pacific Timezone', 'https://remotive.io/remote-jobs/customer-support/customer-success-champion-516576', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Translations Clinical Quality Auditors (Italian/English)', 'International SOS', 'full_time', '2021-03-09T13:40:12', 'Italy only', 'https://remotive.io/remote-jobs/all-others/translations-clinical-quality-auditors-italian-english-487628', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Managing Editor', 'Testlio', 'full_time', '2021-03-09T13:40:07', 'USA Only', 'https://remotive.io/remote-jobs/writing/managing-editor-512640', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Copy Editor', 'Raspberry Pi Foundation', 'full_time', '2021-03-09T13:40:06', 'UK Only', 'https://remotive.io/remote-jobs/writing/copy-editor-515941', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Lead Software QA Engineer', 'Swapcard', 'K - K', '2021-03-09T09:14:27', 'CET Time Zone', 'https://remotive.io/remote-jobs/qa/lead-software-qa-engineer-515914', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Senior C++ Developer', 'Flightradar24', 'NULL', '2021-03-09T05:58:10', 'https://remotive.io/remote-jobs/software-dev/senior-c-developer-515106', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
但是当我在 运行 之后检查 sqldb 中的 remote_jobs 时,table(空集)中没有任何内容。
看一下输出中的一个示例:
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Senior C++ Developer', 'Flightradar24', 'NULL', '2021-03-09T05:58:10', 'https://remotive.io/remote-jobs/software-dev/senior-c-developer-515106', 'full_time']
您的 INSERT 期望插入 7 个值,但您在此实例中只提供了 6 个。看起来您缺少 'candidate_required_location'
的值
我正在尝试获取一个字典列表,即工作公告板 API 中的 return,并将该数据插入到 SQL table 中我的一位队友访问。我 运行 遇到的问题是,当我 运行 我的脚本一次一个地阅读字典并将它们插入 MySQLDb Table 我在我遇到关于格式字符串参数不足的错误之前,通过一些 运行s。这对我来说意义不大,一方面是因为我缺乏经验,另一方面是因为我根据 len(dict) 设置了参数的数量。有什么我偏离轨道的想法吗?
我的代码:
#!/usr/bin/env python3
def refresh_remote(jobs=""):
import MySQLdb
dB = MySQLdb.connect("localhost","******", "******", "BoomTown")
cursor = dB.cursor()
cursor.execute("TRUNCATE TABLE remote_jobs");
for job in jobs:
placeholders = ', '.join(['%s'] * len(job))
columns = ', '.join(job.keys())
sql = "INSERT INTO remote_jobs ( %s ) VALUES ( %s )" % (columns, placeholders)
vls = []
for v in job.values():
try:
str(v).encode(encoding='utf-8').decode('ascii')
if str(v) == "":
v = 'NULL'
else:
v = str(v)
vls.append(v)
except UnicodeDecodeError:
pass
print(vls)
print(sql)
cursor.execute(sql, vls)
dB.close()
print("All done with remote jobs table")
if __name__ == '__main__':
"""
This will be our main guard which will import
gaurd our methods for dropping and refreshing the
tables in the SQL DB
"""
from getRemoteJobs import remote_jobs_get
"""
First we'll need to get remote jobs via the API
call to remotework, then we will send the data
as a list of dicts to refresh_remote to be put
into a SQL table
"""
remote_jobs = remote_jobs_get()
refresh_remote(remote_jobs)
错误:
Traceback (most recent call last):
File "/home/tulsaboomtown/.local/lib/python3.5/site-packages/MySQLdb/cursors.py", line 201, in execute
query = query % args
TypeError: not enough arguments for format string
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./refresh_jobs_db.py", line 49, in <module>
refresh_remote(remote_jobs)
File "./refresh_jobs_db.py", line 28, in refresh_remote
cursor.execute(sql, vls)
File "/home/tulsaboomtown/.local/lib/python3.5/site-packages/MySQLdb/cursors.py", line 203, in execute
raise ProgrammingError(str(m))
MySQLdb._exceptions.ProgrammingError: not enough arguments for format string
我看到我认为从我拥有的那些打印语句中得到的良好输出:
['Business Development Representative (BDR)', 'Brightback', 'full_time', '2021-03-09T21:42:29', 'USA Only', 'https://remotive.io/remote-jobs/business/business-development-representative-bdr-483643', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Customer Success Champion', 'Geckoboard', 'NULL', '2021-03-09T19:05:49', 'Pacific Timezone', 'https://remotive.io/remote-jobs/customer-support/customer-success-champion-516576', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Translations Clinical Quality Auditors (Italian/English)', 'International SOS', 'full_time', '2021-03-09T13:40:12', 'Italy only', 'https://remotive.io/remote-jobs/all-others/translations-clinical-quality-auditors-italian-english-487628', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Managing Editor', 'Testlio', 'full_time', '2021-03-09T13:40:07', 'USA Only', 'https://remotive.io/remote-jobs/writing/managing-editor-512640', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Copy Editor', 'Raspberry Pi Foundation', 'full_time', '2021-03-09T13:40:06', 'UK Only', 'https://remotive.io/remote-jobs/writing/copy-editor-515941', 'NULL']
INSERT INTO remote_jobs ( title, company_name, job_type, publication_date, candidate_required_location, url, salary ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Lead Software QA Engineer', 'Swapcard', 'K - K', '2021-03-09T09:14:27', 'CET Time Zone', 'https://remotive.io/remote-jobs/qa/lead-software-qa-engineer-515914', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Senior C++ Developer', 'Flightradar24', 'NULL', '2021-03-09T05:58:10', 'https://remotive.io/remote-jobs/software-dev/senior-c-developer-515106', 'full_time']
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
但是当我在 运行 之后检查 sqldb 中的 remote_jobs 时,table(空集)中没有任何内容。
看一下输出中的一个示例:
INSERT INTO remote_jobs ( title, company_name, salary, publication_date, candidate_required_location, url, job_type ) VALUES ( %s, %s, %s, %s, %s, %s, %s )
['Senior C++ Developer', 'Flightradar24', 'NULL', '2021-03-09T05:58:10', 'https://remotive.io/remote-jobs/software-dev/senior-c-developer-515106', 'full_time']
您的 INSERT 期望插入 7 个值,但您在此实例中只提供了 6 个。看起来您缺少 'candidate_required_location'
的值