インポート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()