不知道如何将数据从DNS.resolver插入到postgresql。
可以通过将值放在脚本中或从文件中插入到数据库中来插入数据库,但是不知道该怎么做。
import psycopg2
import dns.resolver
conn = psycopg2.connect("dbname=dbname host=127.0.0.1 user=postgres password=****, port=1234")
cur = conn.cursor()
for row in open ('domainnames.txt'):
try:
anwsers = dns.resolver.query(row.rstrip(), 'A')
for rdata in anwsers:
cur.execute(
"insert into schema1.ip (host, ip) VALUES (%s, %s row)")
except dns.resolver.NXDOMAIN:
print ('Domainname%s missing ip' % row.rstrip())
conn.commit()
cur.close()
conn.close()
IndentationError:意外缩进
for row in open ('domainnames.txt'):
try:
anwsers = dns.resolver.query(row.rstrip(), 'A')
for rdata in anwsers:
cur.execute(
"insert into schema1.ip (host, ip) VALUES (%s, %s row)")
except dns.resolver.NXDOMAIN:
print ('Domainname%s missing ip' % row.rstrip())
答案 0 :(得分:0)
您有一个缩进错误,该错误已在控制台中明确指出。您可能对制表符/空格的使用不一致,或者缩进过多,Python期望还有另一个代码块
答案 1 :(得分:0)
因此,如在编辑中一样,您要对齐try
和except
。缩进在这样的表达式上非常重要。现在,您在使用%s
的地方,正在使用字符串格式化程序。基本上%s
允许您在字符串中包含占位符,您可以将其替换为其他值。因此,您的字符串不必是常量,它们可以是动态的。这类似于新版本的python中的“ f字符串”。请查看pyformat
我认为rdata.address
提供IP,rdata.exchange
提供主机。
for row in open ('domainnames.txt'):
try:
anwsers = dns.resolver.query(row.rstrip(), 'A')
for rdata in anwsers:
cur.execute(
"insert into schema1.ip (host, ip) VALUES (%s, %s)" % (rdata.exchange, rdata.address))
except dns.resolver.NXDOMAIN:
print ('Domain name %s missing ip' % row.rstrip())
在'Doamin name'和%s
之间也留有一个空格,以使其易于阅读
答案 2 :(得分:0)
谢谢大家的帮助!
修复缩进错误后,我发现了另一个错误,该错误是cur.execute。
"insert into schema1.ip (host, ip) VALUES (%s, %s)" % (row.rstrip(), rdata.address))
-不起作用
cur.execute("insert into schema1.ip (host, ip) VALUES (%s, %s);", (row.rstrip(), rdata.address))
-工作
原来,它正在查询数据库中“ row.strip()”值,并说没有这样的表。 玩弄半冒号,依此类推,我在最下面一行使用它。