タグ付けされた質問 「sqlalchemy」

SQLAlchemyは、アプリケーション開発者にSQLの完全な機能と柔軟性を提供するPython SQLツールキットおよびオブジェクトリレーショナルマッパーです。

4
SQLAlchemyを使用して新しいデータベースを作成する方法
SQLAlchemyを使用すると、次のようにEngineオブジェクトが作成されます。 from sqlalchemy import create_engine engine = create_engine("postgresql://localhost/mydb") へengineの引数で指定されたデータベースcreate_engine(この場合はmydb)が存在しない場合、アクセスは失敗します。指定したデータベースが存在しない場合、SQLAlchemyに新しいデータベースを作成するように指示することはできますか?
103 python  sqlalchemy 


11
SQLAlchemy式から生のコンパイル済みSQLクエリを取得するにはどうすればよいですか?
SQLAlchemyクエリオブジェクトがあり、すべてのパラメーターがバインドされた(たとえば%s、ステートメントコンパイラーまたはMySQLdbダイアレクトエンジンによってバインドされるのを待っている変数がないなど)、コンパイルされたSQLステートメントのテキストを取得します。 str()クエリを呼び出すと、次のようなことがわかります。 SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC query._paramsを調べてみましたが、空の辞書です。私はこのsqlalchemy.ext.compiler.compilesデコレータの例を使用して独自のコンパイラを作成しましたが、そこにあるステートメントでさえ、%sデータが必要な場所にまだあります。 クエリを作成するためにパラメーターが混在するタイミングがよくわかりません。クエリオブジェクトを調べるとき、それらは常に空のディクショナリです(ただし、クエリは正常に実行され、エコーロギングをオンにするとエンジンが出力します)。 SQLAlchemyは、基になるクエリを知りたくないというメッセージを受け取り始めています。これは、さまざまなDB-APIのすべての式APIのインターフェイスの一般的な性質を破壊するためです。クエリが何であるかがわかる前にクエリが実行されてもかまいません。ただ知りたいだけです!
101 python  sql  mysql  sqlalchemy 

2
SQLAlchemy:セッションの作成と再利用
ただ、簡単な質問:SQLAlchemyのは語る呼び出しsessionmaker()た後が、結果として呼び出すSession()クラスにあなたがあなたのDBに話をする必要があるたびに。私にとっては、2番目に最初session.add(x)または類似したことを実行することを意味します。 from project import Session session = Session() これまで私が行ったことはsession = Session()、モデルで一度呼び出しを行ってから、常に同じセッションをアプリケーションの任意の場所にインポートすることでした。これはWebアプリケーションであるため、通常は同じ意味になります(1つのビューが実行されるため)。 しかし、違いはどこですか?機能が完了するまでデータベースセッションで1つのセッションを使用し、次にDBと通信するときに新しいセッションを作成することに対して、常に1つのセッションを使用することの欠点は何ですか? 複数のスレッドを使用する場合、各スレッドが独自のセッションを取得する必要があることがわかります。しかしscoped_session()、を使用して、問題が存在しないことをすでに確認していますか? 私の仮定のいずれかが間違っているかどうかを明確にしてください。


8
sqlalchemyモデルの定義された列を反復する方法?
SQLAlchemyモデルで定義された列のリストを反復処理する方法を理解しようとしています。いくつかのシリアル化およびコピーメソッドをいくつかのモデルに書き込むために必要です。obj.__dict__SA固有のアイテムが多数含まれているため、繰り返し処理することはできません。 idとdesc名前を以下から取得する方法を知っている人はいますか? class JobStatus(Base): __tablename__ = 'jobstatus' id = Column(Integer, primary_key=True) desc = Column(Unicode(20)) この小さなケースでは、簡単に以下を作成できます。 def logme(self): return {'id': self.id, 'desc': self.desc} しかし、私はdict(より大きなオブジェクトに対して)自動生成するものを好みます。



9
SQLAlchemy-テーブルのリストの取得
ドキュメントでこれに関する情報を見つけることができませんでしたが、SQLAlchemyで作成されたテーブルのリストを取得するにはどうすればよいですか? クラスメソッドを使用してテーブルを作成しました。

3
Alembicアップグレードスクリプトで挿入と更新を実行するにはどうすればよいですか?
Alembicのアップグレード中にデータを変更する必要があります。 現在、最初のリビジョンに「プレーヤー」テーブルがあります。 def upgrade(): op.create_table('player', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.Unicode(length=200), nullable=False), sa.Column('position', sa.Unicode(length=200), nullable=True), sa.Column('team', sa.Unicode(length=100), nullable=True) sa.PrimaryKeyConstraint('id') ) 「チーム」テーブルを紹介したいと思います。2つ目のリビジョンを作成しました。 def upgrade(): op.create_table('teams', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=80), nullable=False) ) op.add_column('players', sa.Column('team_id', sa.Integer(), nullable=False)) 2回目の移行で次のデータも追加してください。 チームテーブルに入力します。 INSERT INTO teams (name) SELECT DISTINCT team FROM players; players.teamの名前に基づいて、players.team_idを更新します。 UPDATE players AS p …

2
sqlalchemyの宣言的ORM拡張を使用する場合の複数列のインデックス
ドキュメントとsqlalchemy.Columnクラスのコメントによると、クラスsqlalchemy.schema.Indexを使用して、複数の列を含むインデックスを指定する必要があります。 ただし、この例では、次のようにTableオブジェクトを直接使用する方法を示しています。 meta = MetaData() mytable = Table('mytable', meta, # an indexed column, with index "ix_mytable_col1" Column('col1', Integer, index=True), # a uniquely indexed column with index "ix_mytable_col2" Column('col2', Integer, index=True, unique=True), Column('col3', Integer), Column('col4', Integer), Column('col5', Integer), Column('col6', Integer), ) # place an index on col3, col4 Index('idx_col34', mytable.c.col3, mytable.c.col4) …

5
SqlAlchemy-関係属性によるフィルタリング
SQLAlchemyの経験があまりなく、解決できない問題があります。私は検索を試み、多くのコードを試しました。これは私のクラスです(最も重要なコードに削減されています): class Patient(Base): __tablename__ = 'patients' id = Column(Integer, primary_key=True, nullable=False) mother_id = Column(Integer, ForeignKey('patients.id'), index=True) mother = relationship('Patient', primaryjoin='Patient.id==Patient.mother_id', remote_side='Patient.id', uselist=False) phenoscore = Column(Float) そして、私はすべての患者を照会したいと思います。 == 10 言われたように、私はたくさんのコードを試しましたが、私はそれを取得しません。私の目には、論理的な解決策は patients = Patient.query.filter(Patient.mother.phenoscore == 10) .mother.phenoscore出力時に各要素にアクセスできますが、このコードではアクセスできないためです。 (SQLステートメントや追加の結合ステートメントを記述せずに)リレーションシップの属性でフィルタリングする(直接)可能性はありますか?この種類のフィルターは複数回必要です。 簡単な解決策がなくても、私はすべての答えを得られてうれしいです。

6
フラスコ-sqlalchemyまたはsqlalchemy
私はフラスコとsqlalchemyの両方を初めて使用し、フラスコアプリで作業を開始するだけで、今のところsqlalchemyを使用しています。Flask-sqlalchemyとsqlalchemyを使用することから得られる大きなメリットがあるかどうか疑問に思っていました。http://packages.python.org/Flask-SQLAlchemy/index.htmlで十分な動機を見つけることができなかったか、値を理解できなかったのかもしれません。あなたの説明をお願いします。

5
sqlalchemy:1つのクエリで複数のテーブルを結合する方法は?
次のSQLAlchemyマップクラスがあります。 class User(Base): __tablename__ = 'users' email = Column(String, primary_key=True) name = Column(String) class Document(Base): __tablename__ = "documents" name = Column(String, primary_key=True) author = Column(String, ForeignKey("users.email")) class DocumentsPermissions(Base): __tablename__ = "documents_permissions" readAllowed = Column(Boolean) writeAllowed = Column(Boolean) document = Column(String, ForeignKey("documents.name")) 次のようなテーブルを取得する必要がありますuser.email = "user@email.com"。 email | name | document_name | …
92 python  sql  join  sqlalchemy 

6
メモリ効率の高い組み込みのSqlAlchemyイテレータ/ジェネレータ?
SqlAlchemyを使用してインターフェースする最大1,000万レコードのMySQLテーブルがあります。データセットの一口サイズのチャンクをインテリジェントにフェッチする組み込みのジェネレーターを使用していると思っていたとしても、このテーブルの大きなサブセットに対するクエリはメモリを大量に消費することがわかりました。 for thing in session.query(Things): analyze(thing) これを回避するには、チャンクで噛み付く独自のイテレータを作成する必要があることがわかりました。 lastThingID = None while True: things = query.filter(Thing.id < lastThingID).limit(querySize).all() if not rows or len(rows) == 0: break for thing in things: lastThingID = row.id analyze(thing) これは正常ですか、それともSA組み込みジェネレーターに関して私が見逃しているものがありますか? この質問に対する答えは、メモリ消費が予想されないことを示しているようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.