尝试将数据插入postgres表eval()arg 1时,for循环出现问题1必须是字符串或代码obj

2024-10-03 09:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这件事已经束手无策了。在

所以我创建了一个脚本,从操作系统捕获数据,并将其插入字典中。下一步应该是将这些数据插入postgres数据库。但是,当执行for循环遍历数据时,我得到了以下错误。在

/usr/bin/python2.7 /home/gmastrokostas/PycharmProjects/learning/Violent_Python.py Traceback (most recent call last): File "/home/gmastrokostas/PycharmProjects/learning/Violent_Python.py", line 52, in for db_loop in eval(server_info): TypeError: eval() arg 1 must be a string or code object

下面是postgres表脚本和python脚本。表的名称是SERVERS,列是“hostname”、“OS”、“RAM”、“CPU”。在

创建表的SQL脚本-PostgreSQL 9.4

CREATE TABLE servers
(
  hostname character varying(50),
  "OS" character varying(25),
  "RAM" numeric(4,2),
  "CPU" character varying(50)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE servers
  OWNER TO dbuser;

PYTHON脚本

^{pr2}$

Tags: 数据inpy脚本homeforevalpostgres
2条回答

问题是您正在尝试eval一个字典。eval函数编译代码-即字符串。我不知道你在那里用eval是什么意思。在

好消息是不需要调用eval。更好的消息是我觉得你根本不需要循环。在

您已经构造了一个要插入的命名数据字典。{{cd2>你需要做的就是插入一个连接。在

是代码中的多个错误。首先要插入一行数据(server_info),这样就不需要循环了。另外,对eval()的调用也没有任何意义,因为该函数用于计算字符串中的Python代码,而您将字典作为参数传递给它。在

然后,您不应该自己引用SQL参数(例如,使用"%s"而不是{})。在

最后,假设您已经在字典中拥有数据,使用它来为execute()方法提供绑定变量。在

我将编写如下代码:

server_info = {'hostname': Host_name(), 'OS':OS_make(), 'RAM':mem_frmt, 'CPU':get_processor_info()}

conn = psycopg2.connect("host='10.0.0.41' dbname='serverinfo' user='dbuser'")
curs = conn.cursor()

curs.execute("""INSERT INTO servers (hostname,OS,RAM,CPU) VALUES (%(hostname)s,%(OS)s,%(RAM)s,%(CPU)s)""", server_info)

conn.commit()

相关问题 更多 >