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

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

3
SQLAlchemy:エンジン、接続、セッションの違い
私はSQLAlchemyのを使用し、少なくとも3つのエンティティがあります:engine、sessionとconnection持って、executeこの方法は、私が例えばからすべてのレコードを選択したい場合はtable、私はこれを行うことができます engine.execute(select([table])).fetchall() この connection.execute(select([table])).fetchall() そしてこれさえ session.execute(select([table])).fetchall() -結果は同じになります。 私が理解しているように、誰かがengine.executeそれを使用するとconnection、が作成され、開かれsession(Alchemyが処理します)、クエリを実行します。しかし、そのようなタスクを実行するこれらの3つの方法の間に世界的な違いはありますか?

10
SQLAlchemy ORMによる一括挿入
個々のオブジェクトを挿入するのではなく、SQLAlchemyに一括挿入を実行させる方法はありますか?つまり、 行う: INSERT INTO `foo` (`bar`) VALUES (1), (2), (3) のではなく: INSERT INTO `foo` (`bar`) VALUES (1) INSERT INTO `foo` (`bar`) VALUES (2) INSERT INTO `foo` (`bar`) VALUES (3) 生のSQLではなくsqlalchemyを使用するようにいくつかのコードを変換しました。これで作業するのがはるかに良くなりましたが、現在は遅くなっています(最大で10倍)。これが理由かどうか疑問に思います。 セッションをより効率的に使用して状況を改善できるかもしれません。現時点ではautoCommit=False、session.commit()いくつかの要素を追加した後、追加しています。新しいクエリを実行しても、DBが他の場所で変更されると、データが古くなるように見えますが、古い結果が返されますか? ご協力いただきありがとうございます!

3
Flask-SQLAlchemyでIDを使用してレコードを削除する方法
私が持っているusers私のMySQLデータベースのテーブルを。このテーブルにはid、nameおよびageフィールドがあります。 どうすればレコードを削除できidますか? 今、私は次のコードを使用します: user = User.query.get(id) db.session.delete(user) db.session.commit() しかし、削除操作の前にクエリを実行したくありません。これを行う方法はありますか?知っています、は使えますがdb.engine.execute("delete from users where id=...")、delete()メソッドを使いたいのですが。

6
Flask SQLAlchemyクエリ、列名を指定
モデルを使用してクエリに必要な列を指定するにはどうすればよいですか(デフォルトではすべての列が選択されます)?sqlalchmeyセッションでこれを行う方法を知っていますが、session.query(self.col1)モデルでどのように行うのですか?できないよSomeModel.query()。方法はありますか?

11
ImportError:MySQLdbという名前のモジュールはありません
私のWebアプリケーションのログインページを作成するために、次のチュートリアルを参照しています。 http://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out--net-29982 データベースに問題があります。私は得ています ImportError: No module named MySQLdb 私が実行するとき http://127.0.0.1:5000/testdb 私はpython mysqlをインストールするために可能なすべての方法を試しました。これは、チュートリアルで言及されている方法、easy_install、sudo apt-get installです。 mysqlを仮想環境にインストールしました。私のディレクトリ構造は、チュートリアルで説明されているものとまったく同じです。モジュールがシステムに正常にインストールされましたが、それでもこのエラーが発生します。 助けてください。これを引き起こしている可能性があります。


6
SQLAlchemy ORMを使用してデータベースを効率的に更新する
新しいアプリケーションを開始し、ORM、特にSQLAlchemyの使用を検討しています。 データベースに「foo」という列があり、それを増やしたいとしましょう。ストレートSQLiteでは、これは簡単です。 db = sqlite3.connect('mydata.sqlitedb') cur = db.cursor() cur.execute('update table stuff set foo = foo + 1') SQLAlchemy SQLビルダーに相当するものを見つけました。 engine = sqlalchemy.create_engine('sqlite:///mydata.sqlitedb') md = sqlalchemy.MetaData(engine) table = sqlalchemy.Table('stuff', md, autoload=True) upd = table.update(values={table.c.foo:table.c.foo+1}) engine.execute(upd) これは少し遅いですが、それほど多くはありません。 SQLAlchemy ORMアプローチの最も適切な推測は次のとおりです。 # snip definition of Stuff class made using declarative_base # snip creation of …
116 python  orm  sqlalchemy 

9
SQLAlchemy:カスケード削除
SQLAlchemyのカスケードオプションでは、単純なカスケード削除が正しく機能しないため、些細なことが欠けているに違いありません。親要素が削除された場合、子はnull外部キーを保持します。 ここに簡潔なテストケースを入れました: from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Parent(Base): __tablename__ = "parent" id = Column(Integer, primary_key = True) class Child(Base): __tablename__ = "child" id = Column(Integer, primary_key = True) parentid …

6
sqlalchemy flush()と挿入されたIDを取得しますか?
私はこのようなことをしたいです: f = Foo(bar='x') session.add(f) session.flush() # do additional queries using f.id before commit() print f.id # should be not None session.commit() しかし、f.idであるNone、私はそれをしようとします。これを機能させるにはどうすればよいですか?
114 python  sqlalchemy 

1
SQLAlchemyのバージョン管理はクラスのインポート順序を考慮します
私はここでガイドに従っていました: http://www.sqlalchemy.org/docs/orm/examples.html?highlight=versioning#versioned-objects と問題に遭遇しました。私は私の関係を次のように定義しました: generic_ticker = relation('MyClass', backref=backref("stuffs")) 文字列を使用するため、モデルモジュールのインポート順序は関係ありません。これはすべて正常に機能しますが、バージョン管理メタを使用すると、次のエラーが発生します。 sqlalchemy.exc.InvalidRequestError:マッパーMapper | MyClass | stuffsを初期化するときに、式 'Trader'が名前を見つけられませんでした( "名前 'MyClass'が定義されていません")。これがクラス名である場合は、両方の依存クラスが定義された後で、この関係()をクラスに追加することを検討してください。 私はエラーを追跡しました: File "/home/nick/workspace/gm3/gm3/lib/history_meta.py", line 90, in __init__ mapper = class_mapper(cls) File "/home/nick/venv/tg2env/lib/python2.6/site-packages/sqlalchemy/orm/util.py", line 622, in class_mapper mapper = mapper.compile() class VersionedMeta(DeclarativeMeta): def __init__(cls, classname, bases, dict_): DeclarativeMeta.__init__(cls, classname, bases, dict_) try: mapper = class_mapper(cls) …
111 python  sqlalchemy 

5
SQLAlchemy ORMからpandas DataFrameへの変換
このトピックは、しばらくの間、ここまたは他の場所で扱われていません。SQLAlchemy <Query object>をpandas DataFrameに変換するソリューションはありますか? パンダには使用する機能がありますpandas.read_sqlが、これには生のSQLを使用する必要があります。私はそれを回避したい2つの理由があります:1)ORMを使用してすべてを既に持っています(それ自体に正当な理由)および2)クエリの一部としてpythonリストを使用しています(例:モデルクラスは.db.session.query(Item).filter(Item.symbol.in_(add_symbols)どこですか)Itemとadd_symbolsリストです)。これはSQLに相当しますSELECT ... from ... WHERE ... IN。 何か可能ですか?


3
SQLAlchemy:日付フィールドをフィルタリングする方法?
ここにモデルがあります: class User(Base): ... birthday = Column(Date, index=True) #in database it's like '1987-01-17' ... たとえば、18〜30年の間隔ですべてのユーザーを選択するために、2つの日付の間でフィルターをかけます。 SQLAlchemyでそれを実装する方法? 私は思います: query = DBSession.query(User).filter( and_(User.birthday >= '1988-01-17', User.birthday <= '1985-01-17') ) # means age >= 24 and age <= 27 これが正しくないことは知っていますが、どのように修正すればよいですか?
105 python  sql  database  orm  sqlalchemy 

3
sqlalchemy IS NOT NULL選択
SQLのようにフィルターを追加して、特定の列からNULLでない値を選択するにはどうすればよいですか? SELECT * FROM table WHERE YourColumn IS NOT NULL; SQLAlchemyフィルターでどうすれば同じことができますか? select = select(table).select_from(table).where(all_filters)
104 python  sqlalchemy 

11
ターゲットデータベースが最新ではありません
Flaskアプリの移行を行いたいのですが。私はAlembicを使用しています。 ただし、次のエラーが発生します。 Target database is not up to date. オンラインで、私はそれがこれと関係があると読みました。 http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch 残念ながら、データベースを最新の状態にする方法と、リンクに示されているコードをどこに/どのように書くべきかがよくわかりません。移行の経験がある場合は、これについて説明していただけますか ありがとう

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