@@ -812,7 +812,8 @@ def psql(self,
812
812
filename = None ,
813
813
dbname = None ,
814
814
username = None ,
815
- input = None ):
815
+ input = None ,
816
+ ** kwargs ):
816
817
"""
817
818
Execute a query using psql.
818
819
@@ -822,9 +823,18 @@ def psql(self,
822
823
dbname: database name to connect to.
823
824
username: database user name.
824
825
input: raw input to be passed.
826
+ **kwargs: variables to be set before execution.
825
827
826
828
Returns:
827
829
A tuple of (code, stdout, stderr).
830
+
831
+ Examples:
832
+ >>> psql('select 1')
833
+ (0, b'1\n ', b'')
834
+ >>> psql('postgres', 'select 2')
835
+ (0, b'2\n ', b'')
836
+ >>> psql(query='select 3', ON_ERROR_STOP=1)
837
+ (0, b'3\n ', b'')
828
838
"""
829
839
830
840
# Set default arguments
@@ -843,6 +853,10 @@ def psql(self,
843
853
dbname
844
854
] # yapf: disable
845
855
856
+ # set variables before execution
857
+ for key , value in iteritems (kwargs ):
858
+ psql_params .extend (["--set" , '{}={}' .format (key , value )])
859
+
846
860
# select query source
847
861
if query :
848
862
psql_params .extend (("-c" , query ))
@@ -874,10 +888,15 @@ def safe_psql(self, query=None, **kwargs):
874
888
username: database user name.
875
889
input: raw input to be passed.
876
890
891
+ **kwargs are passed to psql().
892
+
877
893
Returns:
878
894
psql's output as str.
879
895
"""
880
896
897
+ # force this setting
898
+ kwargs ['ON_ERROR_STOP' ] = 1
899
+
881
900
ret , out , err = self .psql (query = query , ** kwargs )
882
901
if ret :
883
902
raise QueryException ((err or b'' ).decode ('utf-8' ), query )
0 commit comments