将数据插入PostgreSQL

时间:2019-07-12 15:46:57

标签: python postgresql

不知道如何将数据从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())

3 个答案:

答案 0 :(得分:0)

您有一个缩进错误,该错误已在控制台中明确指出。您可能对制表符/空格的使用不一致,或者缩进过多,Python期望还有另一个代码块

答案 1 :(得分:0)

因此,如在编辑中一样,您要对齐tryexcept。缩进在这样的表达式上非常重要。现在,您在使用%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()”值,并说没有这样的表。 玩弄半冒号,依此类推,我在最下面一行使用它。