元クラス、SQLAlchemyのお問い合わせ

インポートSQLAlchemyの
 から sqlalchemy.ext.declarative インポートdeclarative_base
 Connectionインスタンスを作成します。 
DB = sqlalchemy.create_engine(" :ルート@ localhostの123 / sqlalchemydb @ MySQLの+のpymysql " 「+データベースモジュールデータベースの種類://ユーザー:パスワード@ホスト/ライブラリ名「
#の定義テーブル
    #はメタクラス継承クラス定義 
ベース= declarative_base(DB) 

    は、テーブルの定義を開始
するクラスをユーザー(ベース):
     __tablename__ = ユーザー" 
    上記ID = sqlalchemy.Column(sqlalchemy.Integer、PRIMARY_KEY = 真)
    名前 = sqlalchemy.Column(sqlalchemy.String(32))

IF  __name__ == " __main__ " 
    base.metadata.create_all(DB) 


CRUDため類似pymysqlカーソルカーソル
から sqlalchemy.ormのインポートsessionmaker 

結合接続 
カーソル= sessionmaker(=バインドDB)#1 ギブクラスの

セッション =カーソル() インスタンス化

による
#のユーザー=ユーザー(
#1      ID = 1、      名前= "ボーダー" 
#の
#のsession.add(ユーザー)Session.commit() session.add_all([ 
#1      ユーザ(ID = 2、NAME = "老赵")、      ユーザ(ID = 3、NAME = "老李") ])
#1 session.commit() all_data =セッション。クエリ(ユーザ).ALL()#查所有
#1 对象プリント(all_data)#得到all_dataのデータの:
#1      プリント( "ID:%s__name:%S" %(data.id、data.name))

many_data = session.query(ユーザー).filter_by(ID = 1) 查多条 
データ、= many_data
 プリント" ID:%のs__name:%S "(data.id、data.name))
many_dataのデータの:     印刷( "ID:s__name%:%S" %(data.id、data.name)) 

データ= session.query(ユーザー)に.get(IDENT = 3。)#チェックは、マスターキーのみを確認することができます
#1 (印刷を"上記ID:%s__name:%S" %(data.id、data.name)) 

削除
    #を照会する
#をデータ= session.query(ユーザー)に.get(IDENT = 3)
#1      位、その後削除
#1 session.deleteを(データ)     #その後、ザ・コミット操作Session.commit() 変更
    照会するデータ= session.query(ユーザー)に.get(IDENT = 2)      #を削除してから
#1 data.name = "李" 
#を     #その後、操作コミット)(Session.commitを

元类

インポートpymysqlの

クラスフィールド(オブジェクト):
     デフ __init__ (自己、名前、COLUMN_TYPE):
        self.name = 
        self.column_type = COLUMN_TYPE
     DEF  __str__ (自己):
         戻り " <%S:%S> "(self.name、 self.column_type)

クラスStringField(フィールド):
     デフ __init__ (自己、名):
        スーパー(StringField、自己)。__init__(名前、" VARCHAR(100)" 

クラスIntegerFieldと(フィールド):
     デフ __init__ (自己、名):
        スーパー(IntegerFieldと、セルフ)__init__(名前、" INT " 

クラスModelMetaClass(タイプ):
     DEF  __new__ある(CLS、名前、塩基、attrsに):
         '' ' 
        クラス名を::のparamの名前
        :PARAM拠点:クラス継承
        :のparam ATTRS:クラス属性
        :リターン:
        '' ' 
        のIF名== " モデル" 戻り値の型の。__new__ (CLS、名前、塩基、attrsに)
        マッピング = dictの() 空の辞書
        について K、V attrs.items():#1 越え属性
            のIFでisinstance(V、フィールド): 属性インスタンスフィールドかどうかを決定する 
                マッピングは、[K] = Vの#は、それらをマッピングするために追加
        のために K :mapping.keys() 、すべてのキーを返します 
            attrsにします。 POP(K) 削除は、中から属性を 
        attrsに[ " __mapping__ " ] =マッピング   フィールドは__mapping__属性を保存するように設定されている 
        attrsに[ " __table__ " ] = 名前の
         戻り値のタイプを。__new__ある(CLS、名前、塩基、attrsに)

クラスモデル(辞書、メタクラス=ModelMetaClass):
     デフ __init__(自己、** kwargsから):
        self.db = pymysql.connect(
            ホスト = " localhostを" 
            ユーザー = " ルート" 
            パスワード = " 123 " 
            データベース = " テスト" 
        self.cursor = 自己.db.cursor()
        スーパー(モデル、自己)。__init__(** kwargsから)

    デフ __getattr__(自己、キー):
         返す自己を[キー] 

    DEF  __setattr__ (セルフ、キー、値):
        セルフ[キー] = 

    DEF 保存(セルフ):
        フィールド = [] 格納するための空のリストフィールド 
        のargs = [] 空を値記憶するリストフィールド
        用の K、V セルフ。__mapping__ .items():
            fields.append(V.NAME)
            args.append(GETATTR(セルフ、K、なし))
        SQLは = " %S(%。INSERT INTO S)の値(%のS)"
            セルフ。__table__ " " .join(フィールド)
             " "([のrepr(STR(I)).join  I における引数] 
               )) SQL拼接        self.cursor.execute(SQL)
         プリント(SQL)
     DEF __del__ (自己) :
         '' ' 
        内存回收''' 
        self.db.commit()
        self.cursor.close()
        self.db.close()クラスの学生(モデル):
    名前 = StringField(" 名前" 
    room_id = IntegerFieldと("
 
        

room_id " 

U =学生(名前= " 老边、room_id = 18 
u.save()

 

おすすめ

転載: www.cnblogs.com/wutanghua/p/11047924.html