Python/MySQL:编程错误1146 - 表不存在
问题描述:
我的目标是创建一个包含表(和条目)的数据库,其中包含有关S 500组成成员的信息。Python/MySQL:编程错误1146 - 表不存在
1)我一直在使用自制安装了MySQL,创建一个数据库和一个表名为 'securities_master'
2)我打开的Spyder并输入以下
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# insert_symbols.py
"""
Created on Fri Jan 13 17:42:53 2017
@author:
"""
from __future__ import print_function
import datetime
from math import ceil
import bs4
import MySQLdb as mdb
import requests
def obtain_parse_wiki_snp500():
"""
Download and parse the Wikipedia list of S&P500
constituents using requests and BeautifulSoup.
Returns a list of tuples for to add to MySQL.
"""
# Stores the current time, for the created_at record
now = datetime.datetime.utcnow()
# Use requests and BeautifulSoup to download the
# list of S&P500 companies and obtain the symbol table
response = requests.get(
"http://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
)
soup = bs4.BeautifulSoup(response.text)
# This selects the first table, using CSS Selector syntax
# and then ignores the header row ([1:])
symbolslist = soup.select('table')[0].select('tr')[1:]
# Obtain the symbol information for each
# row in the S&P500 constituent table
symbols = []
for i, symbol in enumerate(symbolslist):
tds = symbol.select('td')
symbols.append(
(
tds[0].select('a')[0].text, # Ticker
'stock',
tds[1].select('a')[0].text, # Name
tds[3].text, # Sector
'USD', now, now
)
)
return symbols
def insert_snp500_symbols(symbols):
"""
Insert the S&P500 symbols into the MySQL database.
"""
# Connect to the MySQL instance
db_host = 'localhost'
db_user = 'root'
db_pass = ''
db_name = 'securities_master'
con = mdb.connect(
host=db_host, user=db_user, passwd=db_pass, db=db_name
)
# Create the insert strings
column_str = """ticker, instrument, name, sector,
currency, created_date, last_updated_date
"""
insert_str = ("%s, " * 7)[:-2]
final_str = "INSERT INTO symbol (%s) VALUES (%s)" % \
(column_str, insert_str)
# Using the MySQL connection, carry out
# an INSERT INTO for every symbol
with con:
cur = con.cursor()
cur.executemany(final_str, symbols)
if __name__ == "__main__":
symbols = obtain_parse_wiki_snp500()
insert_snp500_symbols(symbols)
print("%s symbols were successfully added." % len(symbols))
3)以上内容是从本书逐字复制的,应该填入'securities_master'中的'symbol'表中,但您可以看到它会返回错误...
in [2]: runfile('/Users/alexfawzi/untitled4.py', wdir='/Users/alexfawzi')
Traceback (most recent call last):
File "<ipython-input-2-ecff2c9aa5ce>", line 1, in <module>
runfile('/Users/alexfawzi/untitled4.py', wdir='/Users/alexfawzi')
File "/Users/alexfawzi/anaconda/lib/python2.7/site- packages/spyder/utils/site/sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)
File "/Users/alexfawzi/untitled4.py", line 92, in <module>
insert_snp500_symbols(symbols)
File "/Users/alexfawzi/untitled4.py", line 87, in insert_snp500_symbols
cur.executemany(final_str, symbols)
File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 253, in executemany
r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 346, in _query
rowcount = self._do_query(q)
File "/Users/alexfawzi/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py", line 310, in _do_query
db.query(q)
ProgrammingError: (1146, "Table 'securities_master.symbol' doesn't exist")
编程错误!党!我无法想象通过选择noobs的错误很有趣,所以非常感谢任何花时间去帮助的人。
答
不再创建这些蜱一切“的尝试反引号`
变化final_str这样:
final_str = "INSERT INTO symbol (%s) VALUES (%s)" % (column_str, insert_str)
你应该首先在python解释器上逐行手动运行该程序,以了解发生了什么,确保web url成功加载 –
感谢您的帮助,我更改为使用SQLite,然后通过/更改它沿着一个教程一行接一行,它不仅工作,但我实际上明白我在看什么。非常感激 –