【发布时间】:2017-05-11 22:50:05
【问题描述】:
我正在尝试使用 chromedriver 收集数据
我正在使用 url 'http://web.mta.info/developers/turnstile.html' 来获取我的数据,提取文件链接,然后根据数据的日期将其放入两个表中 这是我要执行的代码:
record_cnt = 0
for link in data_list_post:
data = pd.read_table(link, sep=',')
print('%s:%s rows %s columns' % (link[-10:-4],data.shape[0], data.shape[1]))
record_cnt += data.shape[0]
data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append')
追溯:
---------------------------------------------------------------------------
OperationalError Traceback (most recent call last)
<ipython-input-9-6f5adea38bf9> in <module>()
3 data = pd.read_table(link, sep=',')
4 record_cnt += data.shape[0]
----> 5 data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append')
/Users/xx/anaconda/lib/python3.4/site-packages/pandas/core/generic.py in to_sql(self, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
1199 sql.to_sql(self, name, con, flavor=flavor, schema=schema,
1200 if_exists=if_exists, index=index, index_label=index_label,
-> 1201 chunksize=chunksize, dtype=dtype)
1202
1203 def to_pickle(self, path):
/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in to_sql(frame, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
468 pandas_sql.to_sql(frame, name, if_exists=if_exists, index=index,
469 index_label=index_label, schema=schema,
--> 470 chunksize=chunksize, dtype=dtype)
471
472
/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in to_sql(self, frame, name, if_exists, index, index_label, schema, chunksize, dtype)
1501 dtype=dtype)
1502 table.create()
-> 1503 table.insert(chunksize)
1504
1505 def has_table(self, name, schema=None):
/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in insert(self, chunksize)
662
663 chunk_iter = zip(*[arr[start_i:end_i] for arr in data_list])
--> 664 self._execute_insert(conn, keys, chunk_iter)
665
666 def _query_iterator(self, result, chunksize, columns, coerce_float=True,
/Users/xx/anaconda/lib/python3.4/site-packages/pandas/io/sql.py in _execute_insert(self, conn, keys, data_iter)
1289 def _execute_insert(self, conn, keys, data_iter):
1290 data_list = list(data_iter)
-> 1291 conn.executemany(self.insert_statement(), data_list)
1292
1293 def _create_table_setup(self):
OperationalError: table post has no column named A002
【问题讨论】:
-
听起来您从
data = pd.read_table(link, sep=',')获得的数据有一个名为A002的列,它无法插入到您的sql 表中,因为该sql 表没有A002字段定义。该 sql 表中的列是什么? -
列名是'index', 'C/A', 'UNIT', 'SCP', 'STATION', 'LINENAME', 'DIVISION', 'DATE', 'TIME', 'DESC'、'ENTRIES'、'EXITS'
-
您是在此代码之前创建您的 sql
post表,还是使用您的代码data.to_sql(name='post', con=conPost, flavor='sqlite', if_exists='append')动态创建的? -
但是每次我运行它时都会出现一个新的“操作错误:表帖子没有名为....”的列,所以我如何让它使用它拥有的行而不是担心这些其他列?
-
是的,我创建了
conPost = sqlite3.connect(post.db),然后下一个代码块就是上面列出的代码,每次我调用这个代码时,它都会在运行时产生一个新的operationalerror