【问题标题】:Using pipes to redirect a function-generated SQL query to the psql command使用管道将函数生成的 SQL 查询重定向到 psql 命令
【发布时间】:2010-11-05 22:07:17
【问题描述】:

我有一个脚本,可以将 SQL 查询生成为文本,例如

...
return "SELECT COUNT(*) FROM important_table" 

然后我想在 PostgreSQL 数据库上运行。我可以用这样的两行来做到这一点:

python SQLgeneratingScript.py parameters > temp.sql 
psql -f temp.sql -d my_database 

但似乎我应该能够用管道将它排成一行,但我不知道如何。

【问题讨论】:

  • 你为什么不使用像 psycopg2 这样的 python 数据库连接器???

标签: python sql postgresql pipe


【解决方案1】:
python SQLgeneratingScript.py parameters|psql -d my_database

【讨论】:

    【解决方案2】:

    我不知道你为什么不使用像 psycopg2 这样的 python postgresql 连接器,但是如果你想使用 Unix 命令重定向 来做你想做的事情,你将不得不在你的代码中这样做

    ...
    print "SELECT COUNT(*) FROM important_table"  # or use sys.stdout.write()
    

    如果您像这样运行命令,这将写入您的文件 temp.sql

    python SQLgeneratingScript.py parameters > temp.sql
    

    但是我会建议像这样在 python 中写入文件

    def generate_sql():
       ...
       return "SELECT COUNT(*) FROM important_table"
    
    with open('temp.sql', 'w') as f
       sql = generate_sql()
       f.write(sql)
    

    或更多使用psycopg2直接执行你的sql

    import psycopg2
    
    def generate_sql():
        ...
        return "SELECT COUNT(*) FROM important_table"
    
    conn = psycopg2.connect("dbname= ...")
    
    cur = conn.cursor()
    sql = generate_sql()
    cur.execute(sql)
    
    conn.close()
    

    【讨论】:

    • 谢谢 - 数据中心不会让我安装 psycopg2(我还在研究如何进行 ssh 端口转发):(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多