python动态编写SQL语句,查询openGauss数据库表(postgres)

前言

由于项目需要,数据库采用的是国产数据库openGauss数据库。这个数据库是华为基于postgres数据库再包装的一个开源库,网上参考资料比较少,这里记录一下实际使用过程中的一些经验。

动态查询

这里的动态查询包括好几个地方的动态:

1.数据库表名是不确定的,需要作为参数传入。

2.字段名是不确定的,需要作为参数传入。

3.具体查询条件是不确定的,需要作为参数传入(常见)。

网上比较常见的是第三种情况,一般数据库常用的解决方式通常是使用一个占位符%s表示一个形参,实际使用的时候传入实参即可。%s表示一般的字符串,通常一般占位符都用%s表示。

第三种情况举例:

#建立数据库连接

# connect() 方法的参数一般包括:
# database: 要连接的数据库名称
# user:连接数据库的用户名
# password: 连接数据库的密码
# host: 数据库端口的地址,一般为 “localhost”,或者主机的IP地址
# port: 门户 opengauss默认为26000.
con = psycopg2.connect(database="hightemperaturedata", user="jack", password="gauss@111", host="192.168.80.130", port="26000",encoding="gb2312")

#查询符合条件的内容——————————使用%s作为占位符,表示时间形参
sql ="SELECT * from gongchengcanshutest where time=%s"
para = ('2022-05-12 08:30:38.424',)  #真实的时间参数(注意最后需要带一个逗号,)
cur = con.cursor()
cur.execute(sql,para)     #实际查询时,传入真实的参数
rows = cur.fetchall()     #查询到的内容以数组形式返回
for row in rows:   #显示查询的内容
    print(row[0]," S2=",row[1])
    print(row[0]," 100=",row[2])
    print(row[0],"elec=",row[3])

第一种情况和第二种情况,涉及到数据库表名和字段名这种固有的东西是动态的,使用%s占位符表示形参,会报错。这时我们需要用到format标准格式进行传参。

第二种情况举例:

curs = con.cursor()
sql_command2 = "select {name} from gongchengcanshutest1 where time>=%s and time<=%s"        #name是字段名的形参,name是可以更改的,只要与下文传参时的名字对应即可(%s表示占位符与第三种情况相同)
para=(begin_time,end_time,)
curs.execute(sql_command2.format(name='time'),para)   #实际执行的时候采用format对name进行传参,para则对占位符%s进行传参
xdata = curs.fetchall()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日梦想家_胖七七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值