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

个人做财经类网站wordpress产品展示类

个人做财经类网站,wordpress产品展示类,软件系统开发合同,今天的新闻内容50字最近在一个使用fastapitortoise-orm的项目中,需要将orm的语句编译成特定数据库方言,但是查询了官方文档及一些资料却找不到合适的方法论😔,于是乎我就把目光放到了sqlalchemy身上,东找西找给我找着了。话不多说&#x…

最近在一个使用fastapi+tortoise-orm的项目中,需要将orm的语句编译成特定数据库方言,但是查询了官方文档及一些资料却找不到合适的方法论😔,于是乎我就把目光放到了sqlalchemy身上,东找西找给我找着了。话不多说,请看代码。

方法1:

import sqlalchemy.dialects.mysql
from sqlalchemy import Integer, String, Column
from sqlalchemy.orm import declarative_base
from sqlalchemy.sql import insertBase = declarative_base()class Student(Base):__tablename__ = 'student'id = Column(Integer, primary_key=True, index=True)name = Column(String, index=True, comment="名称")age = Column(Integer, index=True, comment="年龄")def generate_sql(instance):stmt = insert(instance.__class__).values({c.name: getattr(instance, c.name) for c in instance.__table__.columns})return stmt.compile(dialect=sqlalchemy.dialects.mysql.dialect(), compile_kwargs={"literal_binds": True})
ikun = Student(id=1, name="ikun", age=30)
jay = Student(id=1, name="jay", age=26)
print(generate_sql(ikun)) # INSERT INTO student (id, name, age) VALUES (1, 'ikun', 30)
print(generate_sql(jay))  # INSERT INTO student (id, name, age) VALUES (1, 'jay', 26)

上面代码通过insert() 创建一个 INSERT 语句对象,然后获取模型实例的对应列的值,使用stmt.compile编译成mysql的方言。但是这个方法对于json类型的字段会编译失败,出现

sqlalchemy.exc.CompileError: No literal value renderer is available for literal value "['唱跳', 'rap', '篮球']" with datatype JSON

的错误提示。

因此,介绍下一个方法。

方法2:

import sqlalchemy.dialects.mysql
from sqlalchemy import Integer, String, Column, JSON, text
from sqlalchemy.orm import declarative_base
from sqlalchemy.sql.compiler import SQLCompilerBase = declarative_base()class Student(Base):__tablename__ = 'student'id = Column(Integer, primary_key=True, index=True)name = Column(String, index=True, comment="名称")age = Column(Integer, index=True, comment="年龄")hobby = Column(JSON, comment="爱好")def generate_sql(instance: Student) -> SQLCompiler:columnsmap = {c.name: getattr(instance, c.name) for c in instance.__table__.columns}columns = columnsmap.keys()stmt = text(f"INSERT INTO {instance.__tablename__} ({', '.join(columns)}) VALUES ({', '.join([f":{c}" for c in columns])});").bindparams(**columnsmap)return stmt.compile(dialect=sqlalchemy.dialects.mysql.dialect(), compile_kwargs={"literal_binds": True})

输出:

ikun = Student(id=1, name="ikun", age=30, hobby=json.dumps(["唱跳", "rap", "篮球"]))
jay = Student(id=1, name="jay", age=26, hobby=json.dumps(["唱歌", "足球"]))
print(generate_sql(ikun)) # INSERT INTO student (id, name, age, hobby) VALUES (1, 'ikun', 30, '["\\u5531\\u8df3", "rap", "\\u7bee\\u7403"]');
print(generate_sql(jay)) # INSERT INTO student (id, name, age, hobby) VALUES (1, 'jay', 26, '["\\u5531\\u6b4c", "\\u8db3\\u7403"]');

如果text() 创建原始SQL文本语句,使用参数占位符 :name, :age, :hobby,bindparams() 将实际值绑定到SQL语句中的占位符,dialect=sqlalchemy.dialects.mysql.dialect() 指定使用MySQL方言。使用这种生成也不需要考虑特殊字符转义的问题。

http://www.yayakq.cn/news/407083/

相关文章:

  • 珠海企业医疗网站建设q版网页游戏大全
  • 广安门内网站建设中国核工业二三建设有限公司招聘信息
  • 哪些网站做外链好软件开发入门
  • 公司网站怎么做网站备案wordpress 微博插件
  • 商城网站设计制作html中网站最下面怎么做
  • 网站seo优化主要有哪些手段网站源码下载插件
  • 怎么做关不掉的网站公众号做微网站
  • 网站建设模板怎么设计南京外贸网站建设公司
  • 网站建设开场白百姓网网站开发的意义
  • 做云购网站网站实时推送怎么做
  • 学校网站做等级保护勉费申请做网站
  • 优秀国外网站设计赏析外贸网站模板制作
  • 站点推广促销电子商务平台的营销推广方案
  • 网站显示乱码怎么办啊类似淘宝的购物网站 建设
  • seo外贸仿牌网站换域名广东手机网站建设报价表
  • 网站建设 部署与发布视频泰安人力资源招聘
  • seo 网站树网页设计需要学什么编程
  • 视频网站cms系统文明网站建设情况报告
  • 小白怎么学做网站南平网站怎么做seo
  • 专业做外贸网站免费网站空间注册
  • 黑龙江建设兵团知青网站wordpress瀑布流图片主题
  • 自己做免费的网站吗网站运营经验
  • 网站素材下载有关网站建设的公众号
  • 长沙建站长沙网站深圳 企业网站建设
  • 做企业网站一般用什么服务器中铁建设集团有限公司是国企还是央企
  • 众网站seo排名优化培训
  • 平凉网站建设reduseo做得好的企业网站
  • 做网站需要看啥书上海网站开发培训价格
  • 贵阳银行手机银行下载官方网站icp备案查询网站
  • 石家庄外贸公司网站设计公司生活分类信息网站大全