フラスコ-sqlchemyの使用

プロジェクトではFlask-sqlalchemyを使用しましたが、後で忘れてしまい、英語の情報を確認する必要がないように、ここで使用法を要約してみましょう。
1. sqlalchemyを使用する最初の段階:
最初に、次のように、クラスを使用してsqlalchemyにテーブル構造を伝えます。

class AlarmStatistical(db.Model):
    __bind_key__ = 'xnet_master'
    __tablename__ = 'dashboard_alarm_statistical'

    id = db.Column(db.Integer, primary_key=True)
    source = db.Column(db.String(255), index=True)
    pod = db.Column(db.String(255), index=True)
    start_time = db.Column(db.DateTime, index=True)
    count = db.Column(db.Integer)

    def __init__(self, source, pod, start_time, count):
        self.source = source
        self.pod = pod
        self.start_time = start_time
        self.count = count

    def alter(self):
        self.count += 1

bind_keyテーブル名は、パスとデータベースのテーブル名が表す環境変数にフラスコである
点に注意してください。PRIMARY_KEYは持っている必要があります
し、データベース内のデータを直接これらの関数を呼び出すために使用されるときには、このクラスの関数を書くことができます
ので、私たちは、次の操作の一部で完了テーブル、外観を入れて
2、セレクト動作
選択フィルタSQLAlchemyの基本的な方法を使用してが行われ、filter_byの
差があり、filter_byは、いくつかの複雑な式の中で使用することができます

f = AlarmStatistical.query.filter(AlarmStatistical.id == id).all()

.ALL()資格のすべてのデータが返され、他の方法があります
()最初のデータを返す1次回
.limit(n)はリターンn個のデータ
、公式ウェブサイトは、特定のAPIを見つけるためにソートメソッドについてだけでなく、アドオンを

次のように使用することもできます。

data = AlarmStatistical.query.filter(AlarmStatistical.id == id)
data = data.filter(AlarmStatistical.pod == pod).all()
#可以模糊查询、或者其他条件查询
#模糊查询:
query.filter(User.email.endswith('@example.com')).all()

複数の不確実な条件がある場合、これを使用できます

p0=[AlarmStatistical.id==id,]
p1=[AlarmStatistical.pod == pod]
data = AlarmStatistical.query.filter(and_(p0),and_(p1))
#或者这样
p = [AlarmStatistical.id==id, AlarmStatistical.pod == pod]
data = AlarmStatistical.query.filter(and_(p))

3.データを挿入する

p = AlarmStatistical(......) #调用class中的__init__()函数
db.session.add(p)
db.session.commit()

4、SQL文のネイティブの使用
複雑なクエリの多くは、不便な実装SQLAlchemyのオブジェクト、あなたは、このようなSQLインジェクション攻撃など、いくつかのSQL攻撃に注意を払うに直接ネイティブのSQLステートメントを使用しますが、持つことができます

db.engine.execute(sql)

5.データを削除する

p = AlarmStatistical()
db.session.delete(p)
db.session.commit()

6、更新データ
のデータを更新するためには、あなたが最初の問い合わせがデータをカバーする必要があり、その後、更新

u=AlarmStatistical.query.first()
u.id=123  
#更新数据和变量赋值那么简单,但必须是通过查询返回的对象。
db.session.commit()

現時点では、次のようなクラスのメソッドを使用できます。

u=AlarmStatistical.query.first()
u.alter()  
db.session.commit()

7. SQLで関数を使用する

#这个查询,会比较复杂,在现实使用中,完全可以使用原生的sql语句
data = (db.session.query(db.func.date_format(AlarmMessage.alarm_time, '%Y-%m-%d %H:%i').label('alarm_time'), AlarmMessage.alarm_source, AlarmMessage.pod,db.func.count('*').label('alarm_sum')).filter(AlarmMessage.alarm_time >= start_time, AlarmMessage.alarm_time <= end_time)
                .group_by(AlarmMessage.alarm_source, AlarmMessage.pod) )

sqlで関数を使用します:db.func.function-name().label( 'name')、labelはクエリとアクセスの後の名前を参照します。ラベルを使用した後、data.name
クエリにアクセスできます()ここでは選択を意味しますデータ
フィルターは選択条件を表します

sqlalchemyの場合、単純な1対1の関係、複雑な関係の操作、および後での書き込みと書き込みのみ。

190件の元の記事を公開 19件の賞賛 200,000回以上の閲覧

おすすめ

転載: blog.csdn.net/zengchenacmer/article/details/45032033