0

我需要将测试用例中的日志插入到 postgresql 数据库中的表中。

我能够连接到数据库,但我不知道如何在表格中插入这一行结果,我尝试了以下但它不起作用

import logging
import psycopg2
from io import StringIO
from config import config
params = config()
conn = psycopg2.connect(**params)
print(conn)
curr = conn.cursor()
try:

        if not hw.has_connection():
            logging.error('Failure: Unable to reach websb! ==> '+ str(driver.find_element_by_xpath('//span[@jsselect="heading" and @jsvalues=".innerHTML:msg"]').text))

            return

        elif hw.is_websiteReachable():
            logging.info("Success: website is reachable!")

            curr.execute("""INSERT INTO db_name(logs) VALUES (%s)""", ("Success: website is reachable!"))
             conn.commit()
  except:
        logging.error("Failure: Unable to reach website!")
        return

我是这方面的初学者。我已经搜索过,但找不到明确的示例或指南。即使网站可以访问,上面的代码也会引发异常。对不起,如果我听起来很愚蠢。

4

2 回答 2

0

您可以查看我个人在服务器内项目中使用的一个好的解决方案。您只需要为 CRUD 对象提供一个连接字符串,所有事情都会完成。对于 Postgres,您可以使用:

'postgresql+psycopg2://username:password@host:port/database'

或者

'postgresql+pg8000://username:password@host:port/database'

有关更多详细信息,请查看SQLAlchemy 引擎配置

于 2021-04-28T18:08:51.733 回答
0

看起来您错误地构造了 SQL 语句。而不是INSERT INTO db_name(table_name) ...应该是INSERT INTO table_name(column_name) .... 如果您已在连接设置中正确连接到适当的数据库,则通常不必在每次编写 SQL 时指定数据库名称。

因此,我建议进行以下修改(假设您的表被调用logs并且它有一个名为 的列message):

# ...
sql = 'INSERT INTO logs(message) VALUES (%s);'
msg = 'Success: website is reachable!'
curr.execute(sql, (msg))
conn.commit()

如果这有助于将命名参数传递给 Python 中的 SQL 查询,您也可以阅读此处pyscopg2的文档以获取更多信息。

于 2019-12-20T15:13:10.240 回答