このチュートリアルでは、PostgresでScrapyを使用する方法について説明します。私はポストグルで新しく、治療に精通しています。ProgrammingError:「スキーマ」の列「列」が存在しません
このチュートリアルでは、マイグレーションについて何も述べていないので、DeclarativeBase.metadata.create_all(engine)
を使用してテーブルを生成するか、どこかのコード内でテーブルを生成する予定があると思います。
私models.py
from sqlalchemy import Table, create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine.url import URL
import settings
DeclarativeBase = declarative_base()
def db_connect():
return create_engine(URL(**settings.DATABASE))
def create_scores_table(engine):
""""""
DeclarativeBase.metadata.create_all(engine)
class Scores(DeclarativeBase):
__tablename__ = "scores"
id = Column(Integer, primary_key=True)
score = Column('score', String, nullable=True)
私pipelines.py
:
from sqlalchemy.orm import sessionmaker
from models import Scores, db_connect, create_scores_table
class RrsportsPipeline(object):
def __init__(self):
engine = db_connect()
create_scores_table(engine)
self.Session = sessionmaker(bind=engine)
def process_item(self, item, spider):
session = self.Session()
scores = Scores(**item)
try:
session.add(scores)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
return item
私は、データベースが正しいcredsをデータベース名にすぎ正しく接続されて知っています。
フルトレースバック
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/ubuntu/rgsports/rgsports/rgsports/pipelines.py", line 44, in process_item
session.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 801, in commit
self.transaction.commit()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 392, in commit
self._prepare_impl()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 372, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2019, in flush
self._flush(objects)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2137, in _flush
transaction.rollback(_capture_exception=True)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2101, in _flush
flush_context.execute()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute
rec.execute(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute
uow
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 174, in save_obj
mapper, table, insert)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 800, in _emit_insert_statements
execute(statement, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
return meth(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
compiled_sql, distilled_params
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
exc_info
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
cursor.execute(statement, parameters)
ProgrammingError: (psycopg2.ProgrammingError) column "score" of relation "scores" does not exist
LINE 1: INSERT INTO scores (score)
^
[SQL: 'INSERT INTO scores (score) VALUES (%(score)s) RETURNING scores.id'] [parameters: {'score': u'114'}]
が、私はクモを実行します。
ProgrammingError: column "score" of relation "scores" does not exist
私は手動でテーブルを作成する必要がありますか?もしそうなら、どうですか?私はコード内でそれを持っていることを好むだろう。私のモデルに欠けているものがありますか?あるいは、意図的な移行のようなモデルを実行する必要がありますか?私はテーブルを構築するようには思えません。
from sqlalchemy.orm import sessionmaker
from models import Scores, db_connect, create_matchups_table
は次のようになります:pipeline.pyでは、それはあなたの代わりにcreate_matchups_table
のcreate_scores_tableをインポートする必要があるようにそれを読み込むに見える
[OK]を、あなたは完全なトレースバックを提供することができますエラー? – WildCard
ありがとう、私はやった。 –
あなたのコードに表示されているものは、チュートリアルのフォーマットと一致します。チュートリアルで与えられた例をコピーして貼り付けようとしましたが、正しく実行されているかどうか確認してください。 – WildCard