日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

根据数据库表gengxin实体类_Python学习第四十八天记录打call:SQLALchemy操作MySQL关系型数据库...

發布時間:2025/3/19 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据数据库表gengxin实体类_Python学习第四十八天记录打call:SQLALchemy操作MySQL关系型数据库... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.SQLALchemy使用

  • 安裝
pip install sqlalchemy;
  • SQLAlchemy是Python編程語言下的一款開源軟件,是PythonSQL工具包和對象關系映射器,它為應用程序開發人員提供了SQL的全部功能和靈活性

2.什么是ORM

  • ORM(Object Relational Mapper)就是把數據庫表的行與相應的對象建立關聯,互相轉換;
  • 目前,最知名的Python ORM是SQLAlchemy和SQLobject;

3.數據庫操作

  • 創建表使用create_all()方法,刪除表使用drop_all()方法,我們一起來看一下如何創建和刪除表
# 導入引擎模塊 from sqlalchemy import create_engine # 導入基類模塊 from sqlalchemy.ext.declarative import declarative_base # 導入字段類 from sqlalchemy import Column, Integer, String # 導入會話模塊 from sqlalchemy.orm import sessionmaker# 實體類的基類 Base = declarative_base()# 實體類 class Teacher(Base):'''實體類的創建有兩個方面的用處:1:如果數據庫中沒有表,那么可以使用實體類創建2:如果數據庫中有表,實體類可以映射表的結構,對表的CRUD操作'''# 表名必須指定__tablename__ = 'teacher'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(255))age = Column(Integer)# 打印實例的使用可以發現,數據也是保存在實體類實例的__dict__中def __repr__(self):# print(self.__dict__)return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)__str__ = __repr__# 創建連接引擎 host = 'localhost' port = 3306 username = 'zengzeng' password = '123456' db = 'XKD_Python_Course' connect_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db) engine = create_engine(connect_str, echo=True)# 創建表 Base.metadata.create_all(engine)# 刪除表 # Base.metadata.drop_all(engine)

我們現在命令工具中查看一下數據庫中有沒有我們想要的teacher表,上一篇文章中講過,先登錄mysql:mysql -uzengzeng -p123456,然后進入我們要使用的數據庫:use XKD_Python_Course,我們先通過:show tables;查看一下數據庫中的表,發現沒有teacher表
那現在就可以執行代碼,創建數據庫了,創建好后我們可以在命令行查看一下:show tables;,發現teacher表已經存在了,創建表成功yes!

查看表

想要刪除剛剛創建的表,可以使用drop_all()方法,執行代碼,再查看數據庫表,就可以看teacher表已經被刪除了

Base.metadata.drop_all(engine)
  • 插入數據使用session.add_all()方法;
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmakerBase = declarative_base() class Teacher(Base):__tablename__ = 'teacher'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(255))age = Column(Integer)def __repr__(self):# print(self.__dict__)return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)__str__ = __repr__host = 'localhost' port = 3306 username = 'zengzeng' password = '123456' db = 'XKD_Python_Course' connect_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db) engine = create_engine(connect_str, echo=True)# 創建會話,用于提交數據 Session = sessionmaker(bind=engine) session = Session()# 創建多行行實例,給表添加數據 try:lst = []for i in range(10):teacher = Teacher()teacher.name = 'zengzeng' + str(i)teacher.age = 20 + ilst.append(teacher)print(teacher)# session.add(student) 可以添加一行記錄,也可以添加多行記錄# 注意:這里將行記錄實例添加到session,不會提交,需要手動提交session.add_all(lst)except Exception as e:print('~~~~~~~~~~~'*200)session.rollback()print(e) finally:session.commit()

我們執行代碼,然后去命令工具查看一下表是否插入數據:select * from teacher;

插入數據
  • 查詢操作使用session.query()方法,迭代查詢;
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmakerBase = declarative_base() class Teacher(Base):__tablename__ = 'teacher'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(255))age = Column(Integer)def __repr__(self):# print(self.__dict__)return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)__str__ = __repr__host = 'localhost' port = 3306 username = 'zengzeng' password = '123456' db = 'XKD_Python_Course' conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db) engine = create_engine(conn_str, echo=False)Session = sessionmaker(bind=engine) session = Session()teacher_obj = session.query(Teacher) for teacher in teacher_obj:print(teacher) # 返回結果:{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x1063125f8>, 'age': 20, 'name': 'nihao0', 'id': 1} print('*'*300)# 直接返回實例對象 teacher = session.query(Teacher).get(4) print(teacher) # 返回結果:{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x1075fd400>, 'age': 23, 'name': 'nihao3', 'id': 4} print(teacher.id) # 返回 aobama print(teacher.name) print(teacher.age) print('*'*300)# 返回的是可迭代對象 teacher_results = session.query(Teacher).filter(Teacher.id == 5) for teacher in teacher_results: # 拿到student實例對象print(teacher)
  • 修改操作:session.update();
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmakerBase = declarative_base()class Teacher(Base):__tablename__ = 'teacher'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(255))age = Column(Integer)def __repr__(self):# print(self.__dict__)return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)__str__ = __repr__# 創建連接引擎 host = 'localhost' port = 3306 username = 'zengzeng' password = '123456' db = 'XKD_Python_Course' conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db) engine = create_engine(conn_str, echo=False)# 創建會話,用于提交數據 Session = sessionmaker(bind=engine) session = Session()teacher = session.query(Teacher).get(4) teacher.name = 'Robby' teacher.age = '99' session.commit()

where條件查詢

from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DATE, Enum, ForeignKey import enum from sqlalchemy.orm import sessionmaker Base = declarative_base() class My_Enum(enum.Enum):M = 'M'F = 'F'# 實體類 class Emploee(Base):'''+------------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+------------+---------------+------+-----+---------+-------+| emp_no | int(11) | NO | PRI | NULL | || birth_date | date | NO | | NULL | || first_name | varchar(14) | NO | | NULL | || last_name | varchar(16) | NO | | NULL | || gender | enum('M','F') | NO | | NULL | || hire_date | date | NO | | NULL | |+------------+---------------+------+-----+---------+-------+'''__tablename__ = 'employees'emp_no = Column(Integer, primary_key=True, nullable=False)birth_date = Column(DATE, nullable=False)first_name = Column(String(14), nullable=False)last_name = Column(String(16),nullable=False)gender = Column(Enum(My_Enum), nullable=False)hire_date = Column(DATE, nullable=False)def __repr__(self):return "emp_no='%s', birth_date='%s', first_name='%s', last_name='%s', gender='%s', hire_date='%s'" % (self.emp_no, self.birth_date, self.first_name, self.last_name, self.gender, self.hire_date)__str__ = __repr__# 創建連接引擎 host = 'localhost' port = 3306 username = 'zengzeng' password = '123456' db = 'XKD_Python_Course' conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db) engine = create_engine(conn_str, echo=False)# 創建表 Base.metadata.create_all(engine)# 創建會話,用于提交數據 Session = sessionmaker(bind=engine) session = Session()# # 簡單的where條件查詢過濾, 返回可迭代對象, AND 取與 emploees = session.query(Emploee).filter(Emploee.emp_no < 10010).filter(Emploee.gender == 'M') emploees = session.query(Emploee).filter((Emploee.emp_no > 10010) & (Emploee.gender == 'F'))# OR 取并 emploees = session.query(Emploee).filter((Emploee.emp_no > 10010) | (Emploee.gender == 'F'))# NOT 取反 emploees = session.query(Emploee).filter(~(Emploee.emp_no > 10010))# in emploees = session.query(Emploee).filter(Emploee.emp_no.in_([10010, 10011, 10012]))# not in emploees = session.query(Emploee).filter(~Emploee.emp_no.in_([10010, 10011, 10012]))# like ,like可以忽略大小寫進行模式匹配 emploees = session.query(Emploee).filter(Emploee.last_name.like('B%'))for emploee in emploees:print(emploee)

order排序

  • asc():升序;
例如: emploees = session.query(Emploee).filter(Emploee.last_name.like('B%')).order_by(Emploee.emp_no.asc())
  • desc():降序;
例如: emploees=session.query(Emploee).filter(Emploee.last_name.like('B%')).order_by(Emploee.emp_no.desc())
  • 多字段排序:在語句里面進行多次排序;

聚合與分組

  • list():轉化為列表;
  • count():聚合count(*)查詢;
  • all(): 轉化為列表;
  • limit().one():查詢首行;
emploees = session.query(Emploee) print(list(emploees)) # 轉化為列表 print(emploees.count()) # 聚合count(*)查詢 print(emploees.all()) # 轉化為列表 print(emploees.limit(1).one()) # 查詢首行
  • max():返回最大值;
  • min():返回最小值;
  • avg():返回平均值;
emploees = session.query(func.max(Emploee.emp_no)) emploees = session.query(func.min(Emploee.emp_no)) emploees = session.query(func.avg(Emploee.emp_no))
  • group_by():分組查詢;
emploees = session.query(func.count(Emploee.emp_no)).group_by(Emploee.gender) print(emploees) for emploee in emploees:print(emploee)

參考:https://www.9xkd.com/user/plan-view.html?id=2415909403

總結

以上是生活随笔為你收集整理的根据数据库表gengxin实体类_Python学习第四十八天记录打call:SQLALchemy操作MySQL关系型数据库...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91亚洲精品久久久蜜桃 | 亚洲大胆视频 | 国产视频在线观看一区二区 | 色窝窝无码一区二区三区成人网站 | www精品| 韩国激情呻吟揉捏胸视频 | 午夜小视频网站 | 99999精品视频 | 日韩八区 | 人妻av无码一区二区三区 | 一区二区三区在线免费观看视频 | 午夜影院在线看 | 九九精品免费视频 | 岛国福利视频 | 农村末发育av片一区二区 | 亚洲国产成人av | 又嫩又硬又黄又爽的视频 | 色狠狠av老熟女 | 人妻少妇被猛烈进入中文字幕 | 久久黄色一级视频 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 国产成人综合在线视频 | 国产精品美女久久 | 一区二区三区在线电影 | 成人午夜天 | 国精品一区二区 | 丰满少妇在线观看资源站 | 毛片内射久久久一区 | 亚洲欧美一区二区在线观看 | 久久久人人爽 | 91麻豆精品久久久久蜜臀 | 久久a毛片| 久久av高潮av | 老太太av | 中文字幕观看av | 日韩av在线播 | 日韩福利视频 | 视频在线 | 99热这里都是精品 | 黑人番号 | 亚洲国产精品无码久久久久高潮 | 色综合天天综合 | 亚洲av色一区二区三区精品 | 538国产视频 | 痴女扩张宫交脱垂重口小说 | 欧美国产乱视频 | 欧美自拍在线 | 国产乱人乱偷精品视频a人人澡 | 免费国产一区 | 国产私拍视频 | 欧美日韩免费在线 | 久久精品一区二区三区黑人印度 | 亚洲日本在线观看视频 | 亚洲国产欧美精品 | 少妇特殊按摩高潮惨叫无码 | 草逼视频网 | 日本a免费 | 另类激情综合 | 精品一久久 | 免费看黄在线观看 | 好爽快一点高潮了 | 91亚洲免费| 亚洲成av人片久久 | 亚欧精品视频一区二区三区 | 色婷婷欧美 | 国产专区一区 | 尤物毛片 | 亚洲免费人成 | 大陆女明星乱淫合集 | va婷婷 | 开心激情久久 | 精品国产免费一区二区三区 | 少妇学院在线观看 | 亚洲一区二区视频网站 | 久久精品视频免费看 | 大牛影视剧免费播放在线 | 第九色激情| 黄瓜视频色版 | 爱情岛论坛亚洲线路一 | 欧美性jizz18性欧美 | 男女视频免费观看 | 久久综合婷婷国产二区高清 | 国产精品igao视频 | 高清久久| 538国产精品一区二区 | 亚洲国产成人va在线观看天堂 | 欧美日韩国产免费观看 | av观看网 | 能在线看的av | 国产精品xxx视频 | 花样视频污 | 欧美黄色网络 | 亚洲一区二区视频网站 | 91精品人妻一区二区三区 | 日韩久久一区 | 最新中文字幕在线播放 | 婷婷视频在线 | 中文字幕5566 | 中文字幕国产日韩 |