2011-09-04 16 views
10

rssのフィードURLのリストをsqlite dbに保存します。私はSQLAlchemyを使用していて、これらを格納する方法が不思議でした。列( 'rss_feed_urls'、リスト)列内のデータ型としてリストを使用する(SQLAlchemy)

または、使用できる配列タイプがありますか?

+1

PostgreSQLを使用している場合は、この目的で使用できる配列タイプがあります。 1つの淡い文字列配列は、文字列のリストです。 –

答えて

17

本当に必要がある場合は、PickleTypeを使用できます。しかし、おそらくあなたが望むのは別のテーブルです(リストの行から成ります)。ちょうどあなたのRSSフィードを保持する表を作成します。

class RssFeed(Base): 
    __tablename__ = 'rssfeeds' 
    id = Column(Integer, primary_key=True) 
    url = Column(String) 

は、新しいURLを追加します。

feed = RssFeed(url='http://url/for/feed') 
session.add(feed) 

は、URLのリストを取得します。

session.query(RssFeed).all() 

は、インデックスによって特定のフィードを探します

session.query(RssFeed).get(1) 

SQLAlchemyのをお勧めします。。

3

通常、SQLデータベースの列データ型のリストはありません。

リストを列の値として格納する方法の1つは、リストを文字列に変換することです。これはデータベースのデータ型varcharにマップされます。

もう1つの方法は、リストをシリアル化されたバイナリ表現(たとえば、pickleライブラリを使用)に変換し、値をblobのデータベース値として格納することです。

+1

Bleh私はこれが容易ではないことを知っていました。 varchar型は正確に何ですか? SQLAlchemyのドキュメントは詳しく述べていません。 – Chris

+0

[sqlalchemy.types.LargeBinary](http://www.sqlalchemy.org/docs/core/types.html#sqlalchemy.types.LargeBinary)および[sqlalchemy.types.String](http://www.sqlalchemy .org/docs/core/types.html#sqlalchemy.types.String) –