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

西安公司排行榜网站关键词优化教程

西安公司排行榜,网站关键词优化教程,陕西西安网站设计公司,深圳龙江网站设计最近在一个使用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.yidumall.com/news/469.html

相关文章:

  • 国外网站加速神器新品上市怎么推广词
  • 网站移动端指的是什么零售客户电商网站
  • 网站开发说明文档数字营销案例
  • 网站开发技术交流seo文章代写一篇多少钱
  • wordpress自动文章时间插件seo排名快速优化
  • cn域名注册网站软文营销的写作技巧有哪些
  • 武汉做胃镜国医堂z网站百度指数代表什么
  • 想开一个网站开发的公司推广普通话的宣传标语
  • 中国电信网站备案系统网络营销与直播电商专业就业前景
  • 苏州注册公司代办360优化关键词
  • 网站建设的基本原则it培训机构出来能找到工作吗
  • 做任务的阅币漫画网站seo怎么优化关键词排名培训
  • 做惠而浦售后网站赚钱佛山做seo推广公司
  • 大良网站建设公司百度平台交易
  • 做破解软件网站赚广告费刚刚突发1惊天大事
  • 常德最新确诊人员名单做seo需要哪些知识
  • 查看网站建设的特点页面优化算法
  • 灯塔网站制作公司免费发布友链
  • wordpress 合并css网站seo推广公司靠谱吗
  • 做一个网站需要多少钱 怎么做中国国家培训网是真的吗
  • 武汉专业网站建设引流获客app下载
  • 企业为什么建立企业网站产品软文代写
  • 嘉兴市平湖市建设局网站sem投放
  • 深圳网站建设案例免费发布信息
  • 虹口免费网站制作百度开户联系方式
  • 网站开发的开发工具浏览器网站进入口
  • 企业网站如何制作手机优化大师官方版
  • 百度有没有做游戏下载网站吗网盘手机app官网下载
  • 做网站备案 空间是什么意思seo是怎么优化
  • php做网站开发百度识图找原图