当前位置: 首页 > wzjs >正文

网站建设空间什么意思广州网络推广策划公司

网站建设空间什么意思,广州网络推广策划公司,商店小程序,怎么做网站寄生虫慕慕手记项目日记2025.3.3 现在需要对慕慕手记进行数据库表的补充设计和创建评论表和orm框架封装,重点学会如何理解orm框架是如何工作的。 慕慕手记项目数据库表的补充设计 现在需要设计评论表: CREATE TABLE comment (id int unsigned COMMENT 评论…

慕慕手记项目日记2025.3.3

现在需要对慕慕手记进行数据库表的补充设计和创建评论表和orm框架封装,重点学会如何理解orm框架是如何工作的。

慕慕手记项目数据库表的补充设计

现在需要设计评论表:

CREATE TABLE `comment` (`id` int unsigned COMMENT '评论id' NOT NULL AUTO_INCREMENT,`user_id` int unsigned COMMENT '用户id' NOT NULL,`article_id` int unsigned COMMENT '文章id' NOT NULL,`ipaddr` varchar(255) COMMENT 'ip地址' COLLATE utf8mb4_general_ci NOT NULL,`reply_id` int unsigned COMMENT '回复id' DEFAULT 0,`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
  1. 核心字段

    • id
      自增主键,无符号整型(避免负数),用于唯一标识评论,保证数据检索效率。
    • user_id & article_id
      无符号整型,分别关联用户表和文章表,说明评论必须由已注册用户对某篇文章发出(无匿名评论)。
    • ipaddr
      存储用户IP地址(兼容IPv6需45字符,此处预留255),用于风险控制(如识别恶意刷评)、地域分析或审计需求。
  2. 评论层级关系

    • reply_id

      默认值为0表示顶层评论(直接评论文章),非0时指向父评论的

      id
      

      ,实现

      嵌套评论

      功能。例如:

      sql复制代码-- 查询某文章下所有顶层评论
      SELECT * FROM comment WHERE article_id = 123 AND reply_id = 0;
      -- 查询某条评论的所有回复
      SELECT * FROM comment WHERE reply_id = 456;
      

      这种设计适合

      两级回复

      (评论+子评论),若需多级嵌套(如微博式树状回复),需结合闭包表或路径枚举优化。

  3. 时间管理

    • create_time
      自动记录评论提交时间,用于排序(如“最新评论优先”)或时间范围统计。
    • update_time
      仅在评论修改时更新(如用户编辑内容),若评论不允许修改可省略此字段。

ORM

什么是ORM?ORM(Object-Relational Mapping) 是一种编程技术,用于在面向对象编程语言关系型数据库之间建立桥梁。简单来说,它把数据库中的表、字段、记录映射成程序中的类、属性、对象,让开发者可以用面向对象的方式操作数据库,而无需直接编写复杂的 SQL 语句。

数据库连接的基本封装

在这里我们重点实现一下数据库连接的基本封装,因为ORM也是使用这种方式进行封装然后再供开发者使用。

import pymysqlclass MyROM:def __init__(self):# 初始化数据库连接# 使用pymysql.connect方法创建一个到指定MySQL数据库的连接# 参数包括:host(主机地址), port(端口号), user(用户名), password(密码), database(数据库名), charset(字符集)conn = pymysql.connect(host='172.27.13.88', port=3306, user='root', password='123456', database='mumushouji',charset='utf8mb4')# 创建游标对象,用于执行SQL语句和获取结果cursor = conn.cursor()# 将游标对象保存为类的一个属性,以便其他方法使用self.cursor = cursordef query_all_user(self):# 定义查询所有用户的SQL语句sql = """select * from USER"""# 执行SQL查询self.cursor.execute(sql)# 获取所有查询结果result = self.cursor.fetchall()# 返回查询结果return resultif __name__ == '__main__':# 确保这段代码仅在作为脚本直接运行时被执行,而不是在被导入为模块时执行# 创建MyROM类的实例myrom = MyROM()# 调用query_all_user方法查询所有用户信息result = myrom.query_all_user()# 打印查询结果print(result)

面向过程实现ORM框架封装

import pymysqlclass MyROM:def __init__(self):conn = pymysql.connect(host='172.27.13.88', port=3306, user='root', password='123456', database='mumushouji',charset='utf8mb4')cursor = conn.cursor()self.cursor = cursordef execute(self, sql):self.cursor.execute(sql)result = self.cursor.fetchall()return resultclass User:table_name = 'USER'def query_all(self):sql = "select * from " + self.table_namereturn MyROM().execute(sql)def query_one(self):sql = "select * from %s limit 1 " % (self.table_name)return MyROM().execute(sql)class Acticle:table_name = 'acticle'def query_all(self):sql = "select * from " + self.table_namereturn MyROM().execute(sql)def query_one(self):sql = "select * from %s limit 1 " % (self.table_name)return MyROM().execute(sql)class comment:table_name = 'comment'def query_all(self):sql = "select * from " + self.table_namereturn MyROM().execute(sql)def query_one(self):sql = "select * from %s limit 1 " % (self.table_name)return MyROM().execute(sql)if __name__ == '__main__':user = User()acticle = Acticle()comment = comment()r1 = comment.query_one()r2 = user.query_one()print(r2)

面向对象优雅实现ORM框架封装

 # SELECT字段处理if select_params is not None and isinstance(select_params, list):sql = "SELECT " + ", ".join(select_params) + f" FROM {self.table_name}"else:sql = "SELECT * FROM " + self.table_name# WHERE条件处理where_values = []if where_params:where_clauses = []for k, v in where_params.items():where_clauses.append(f"{k} = '{v}'")  # 保留直接拼接但修复引号问题sql += " WHERE " + " AND ".join(where_clauses)# 统一添加LIMIT(根据需求调整)if not where_params or len(where_params) > 0:sql += " LIMIT 1"print("[Final SQL]", sql)  # 调试输出return MyROM().execute(sql)

ORM框架实现插入语句封装

  def insert(self):keys = []values = []print(self.__dict__)for k, v in self.__dict__.items():keys.append(k)values.append(v)sql  = "insert into %s(%s) values ('%s')" % (self.table_name, ','.join(keys), "','".join(values))print(sql)return MyROM().execute(sql)
http://www.dtcms.com/wzjs/42783.html

相关文章:

  • wordpress怎么修改后台菜单seo排名赚app靠谱吗
  • 这么做国外网站的国内镜像站百度小程序优化
  • 搜索引擎优化的目标体系包括哪些seo流程
  • 做设计有哪些地图网站武汉网站制作推广
  • 广州做网站的公司vi设计公司
  • 哪些网站是django做的如何宣传推广产品
  • dedecms做的网站收费吗热门推广平台
  • 大连网站建设 青鸟传媒互联网营销外包公司
  • 淘宝网站建设类目需要什么资质嘉兴seo外包公司
  • 合肥做兼职网站设计永久不收费的软件app
  • 深圳做公司网站上海百度提升优化
  • 怎么利用花生壳做自己的网站成都百度推广账户优化
  • dreamweaver怎么制作网站app推广代理
  • 移动互联网技术网站百度推广怎么使用教程
  • 贵阳做网站好的公司360推广联盟
  • 如何做一份企业网站seo引擎优化服务
  • 如何使用seo进行综合查询seo作弊
  • 取名网站开发百度免费发布信息平台
  • 国税网站建设现状刷死粉网站推广
  • 强大的技术团队网站建设芒果视频怎样下载到本地
  • 广州公司网站制作公司网络推广需要多少费用
  • 网站广告条幅怎么做动态的企业营销策略分析论文
  • 太原seo招聘seo排名优化
  • 有关天猫网站建设的论文最近时事热点
  • 香港做网站公司哪家好什么是长尾关键词举例
  • 如何创建一个公司网站快手推广网站
  • 商户如何做h5商城网站是什么杭州seo推广排名稳定
  • web前端做网站项目赚钱竞价推广账户竞价托管收费
  • 网站开发分为小程序开发工具
  • 纯静态做企业网站seo研究中心倒闭