PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक कस्टम संकलित अभिव्यक्ति में बाइंडपरम () का उपयोग कैसे करें?

मैं समझ गया। Bindparams के वास्तविक मान SQLCompiler . नामक ऑब्जेक्ट में रखे जाते हैं जो आम तौर पर बोली-विशिष्ट है।यहाँ(गिटहब से लिंक) वह जगह है जहाँ बाइंडपरम्स एक SQLCompiler . में संग्रहीत होते हैं उदाहरण क्वेरी संकलन प्रक्रिया के दौरान

तो मेरे कोड स्निपेट का अंतिम संस्करण इस तरह दिखता है:

class values(FromClause):
    named_with_column = True

    def __init__(self, columns, *args, **kw):
        self._column_args = columns
        self.list = args
        self.alias_name = self.name = kw.pop('alias_name', None)

    def _populate_column_collection(self):
        # self._columns.update((col.name, col) for col in self._column_args)
        for c in self._column_args:
            c._make_proxy(self, c.name)


@compiles(values)
def compile_values(clause, compiler, asfrom=False, **kw):
    def decide(value, column):
        add_type_hint = False
        if isinstance(value, array) and not value.clauses:  # for empty array literals
            add_type_hint = True

        if isinstance(value, ClauseElement):
            intermediate = compiler.process(value)
            if add_type_hint:
                intermediate += '::' + str(column.type)
            return intermediate

        elif value is None:
            return compiler.render_literal_value(
                value,
                NULLTYPE
            ) + '::' + str(column.type)
        else:
            return compiler.process(
                bindparam(
                    None,
                    value=compiler.render_literal_value(
                        value,
                        column.type
                    ).strip("'")
                )
            ) + '::' + str(column.type)

    columns = clause.columns
    v = "VALUES %s" % ", ".join(
        "(%s)" % ", ".join(
            decide(elem, column)
            for elem, column in zip(tup, columns))
        for tup in clause.list
    )
    if asfrom:
        if clause.alias_name:
            v = "(%s) AS %s (%s)" % (v, clause.alias_name, (", ".join(c.name for c in clause.columns)))
        else:
            v = "(%s)" % v
    return v



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बेंचमार्किंग प्रबंधित PostgreSQL क्लाउड समाधान - Google क्लाउड:भाग तीन

  2. आयात करें S3 और aws_s3 का उपयोग करके डेटा को RDS में पोस्टग्रेज करें

  3. अशक्त मूल्यों के साथ SQL समानता/असमानता तुलना

  4. पैरामीटर NULL होने पर कॉलम में DEFAULT मान डालना

  5. PostgreSQL के लिए कस्टम ट्रिगर आधारित उन्नयन