小编今天从项目的角度来讲解这个bug,由于公司新旧项目结合,本人也是第一次接触oracle数据库,虽然和mysql很相似,但是终究还是有不同,遇到的标识符无效有俩种情况,一种就是再终端直接提示,第二种只有通过打断点才能看得出来,bug样式如下:
插入失败,ORA-00904: "TAB_JRZJ": 标识符无效 insert into TAB_JRZJ(XMBH, XMMC, SMJS, JRZJ, RYDM) values(:XMBH, :RYDM)
插入失败,ORA-00904: "TAB_XMRY": 无效数字 insert into TAB_XMRY(XMBH, XMMC, SMJS, JRZJ, RYDM) values(:XMBH, :RYDM)
这个是新项目的表结构:
from instance_app_instance import app
from sqlalchemy import Column, String, Interger
class Tab_JRZJ(app.db.Model):
XMBH = Column(String(32), primary_key=True, name='XMBH')
XMMC= Column(String(32), name='XMMC')
RYDM= Column(String(32), name='RYDM')
JRZJ= Column(String(100), name='JRZJ')
SMJS= Column(Interger, name='SMJS')
class Tab_XMRY(app.db.Model):
XMBH = Column(String(32), primary_key=True, name='XMBH')
XMMC= Column(String(32), name='XMMC')
RYDM= Column(String(32), name='RYDM')
JRZJ= Column(String(100), name='JRZJ')
SMJS= Column(Interger, name='SMJS')
问题分析:
1-由于我是刚接手的项目,所以对数据库以及表格,字段都不很清楚,如果大家也遇到这种情况,一定不要着急,打开你的图形化界面数据库,查看当中的字段和代码Model是否一致,如果不一致,那么问题就出来了,一一修改即可
2-如果之前建表时字段加双引号,那么问题又出来了,你接下来必须在插入数据时字段上也加上双引号,并且大小写要对应,这样问题才可以解决,这也是我发现的第一个和Mysql的不同,oracle更加注重规范的格式,所以安全性可能会比mysql要好!个人见解,大家要选择性的获取想要的信息。
3-当oracle数据表字段为小写时,必须使用引号("")将SQL中的列名包裹才能正确执行SQL语句.
分享一下小经验:
大家要善于打断点来调试bug,按照你的思维逻辑,和端点的执行顺序,会提示相应的信息。如果某一个模块或者功能是你开发的,那么需求和思路很重要,你的思路就是代码打断点执行的顺序,如果没有按照你的预期,那么肯定发生了错误!虽然我的分享可能起不了作用,但是,大家按照自己习惯就好!