sqlalchemy在python中的使用(基本使用)一

水痕001發表於2019-01-03

本文介紹sqlalchemypython中的使用,不涉及到flask或者tornado框架,需要的時候融入到框架專案中即可。

一、依賴包的安裝

  • 1、安裝sqlalchemy

    pip3 install sqlalchemy複製程式碼
  • 2、安裝pymysql

    pip3 install pymysql複製程式碼

二、建立連線(使用python程式碼連線到mysql)

  • 1、新建資料庫

    mysql>
    create database sqlalchemy_data charset=utf8;
    複製程式碼
  • 2、新建一個檔案connect.py

  • 3、導包及資料庫的基本資訊

    from sqlalchemy import create_engineHOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'sqlalchemy_data'USERNAME = 'root'PASSWORD = 'root'複製程式碼
  • 4、使用pymysql建立連線的db_url

    db_url = 'mysql+pymysql://{username
    }:{password
    }@{hostname
    }:{port
    }/{database
    }?charset=utf8'
    .format( username=USERNAME, password=PASSWORD, hostname=HOSTNAME, port=PORT, database=DATABASE)複製程式碼
  • 5、建立一個引擎

    # 建立引擎engine = create_engine(db_url)複製程式碼
  • 6、測試連線是否成功

    if __name__ == "__main__":    connection = engine.connect()    result = connection.execute('select 1')    print(result.fetchone())複製程式碼
  • 7、完整程式碼

    from sqlalchemy import create_engineHOSTNAME = '127.0.0.1'PORT = '3306'DATABASE = 'sqlalchemy_data'USERNAME = 'root'PASSWORD = 'jianshuihen128'db_url = 'mysql+pymysql://{username
    }:{password
    }@{hostname
    }:{port
    }/{database
    }?charset=utf8'
    .format( username=USERNAME, password=PASSWORD, hostname=HOSTNAME, port=PORT, database=DATABASE)# 建立引擎engine = create_engine(db_url)if __name__ == "__main__": connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())複製程式碼

三、使用sqlalchemy建立資料表

  • 1、建立一個modules的檔案,存放資料模型

  • 2、在connect.py檔案中新增連線的sessiondeclarative_base

    from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker# sessionmaker生成一個session類Session = sessionmaker(bind=engine)dbSession = Session()Base = declarative_base(engine)複製程式碼
  • 3、在modules包下建立一個user_module.py的檔案

    import datetimefrom uuid import uuid4from sqlalchemy import Column, Integer, String, DateTime, Booleanfrom sqlalchemy_demo.connect import Baseclass UserModule(Base):    """    建立一個使用者的資料模型    """    __tablename__ = 'user'    uuid = Column(String(36), unique=True, nullable=False, default=lambda: str(uuid4()), comment='uuid')    id = Column(Integer, primary_key=True, autoincrement=True, comment='使用者id')    user_name = Column(String(30), nullable=False, unique=True, comment='使用者名稱')    password = Column(String(64), nullable=False, comment='使用者密碼')    createtime = Column(DateTime, default=datetime.datetime.now, comment='建立時間')    updatetime = Column(DateTime, default=datetime.datetime.now, comment='修改時間')    is_lock = Column(Boolean, default=False, nullable=False, comment='是否鎖住使用者')        def __repr__(self):        return 'User(uuid={uuid
    }, id={id
    }, user_name={user_name
    }, password={password
    }, createtime={createtime
    }, updatetime={updatetime
    }, is_lock={is_lock
    })'
    .format( uuid=self.uuid, id=self.id, user_name=self.user_name, password=self.password, createtime=self.createtime, updatetime=self.updatetime, is_lock=self.is_lock)複製程式碼
  • 4、運動程式碼建立資料表(user_module.py檔案下)

    if __name__ == "__main__":    Base.metadata.create_all()複製程式碼
  • 5、檢視資料表資訊

    mysql>
    desc user;
    +------------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+-------------+------+-----+---------+----------------+| uuid | varchar(36) | NO | UNI | NULL | || id | int(11) | NO | PRI | NULL | auto_increment || user_name | varchar(30) | NO | UNI | NULL | || password | varchar(64) | NO | | NULL | || createtime | datetime | YES | | NULL | || updatetime | datetime | YES | | NULL | || is_lock | tinyint(1) | NO | | NULL | |+------------+-------------+------+-----+---------+----------------+7 rows in set (0.01 sec)mysql>
    複製程式碼

四、對資料表簡單的增刪改查

  • 1、單獨建立一個test_user.py的測試檔案

  • 2、確保前面在connect.py檔案中新增的

    from sqlalchemy.orm import sessionmaker# sessionmaker生成一個session類Session = sessionmaker(bind=engine)dbSession = Session()複製程式碼
  • 3、新增單條資料

    from sqlalchemy_demo.connect import dbSessionfrom sqlalchemy_demo.modules.user_module import UserModuledef add_user():    row = UserModule(user_name='張三', password='123')    dbSession.add(row)    dbSession.commit()if __name__ == "__main__":    add_user()複製程式碼
  • 4、同時新增多條資料

    from sqlalchemy_demo.connect import dbSessionfrom sqlalchemy_demo.modules.user_module import UserModuledef add_user():    dbSession.add_all([        UserModule(user_name='王五', password='123'),        UserModule(user_name='馬六', password='123'),        UserModule(user_name='趙五', password='123'),    ])    dbSession.commit()if __name__ == "__main__":    add_user()複製程式碼
  • 5、查詢資料

    ...def query_user():    rows = dbSession.query(UserModule).all()    print(rows)...複製程式碼
  • 6、修改資料

    ...def update_user():    row = dbSession.query(UserModule).filter(UserModule.id == 1).update({UserModule.password: '234'
    }) print(row) dbSession.commit()...複製程式碼
  • 7、刪除資料

    ...def delete_user():    row = dbSession.query(UserModule).filter(UserModule.id == 3)[0]    print(row)    dbSession.delete(row)    dbSession.commit()...複製程式碼

來源:https://juejin.im/post/5c2dbc23518825235a056838

相關文章