summary refs log tree commit diff
path: root/gnu/packages/databases.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/databases.scm')
-rw-r--r--gnu/packages/databases.scm937
1 files changed, 461 insertions, 476 deletions
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 7cff0f99c5..00e26e4839 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -185,24 +185,24 @@
                                "4store-fix-buildsystem.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("perl" ,perl)
-       ("python" ,python-2)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("pcre" ,pcre "bin")                       ;for 'pcre-config'
-       ("pkg-config" ,pkg-config)))
+     (list perl
+           python-2
+           autoconf
+           automake
+           gettext-minimal
+           libtool
+           `(,pcre "bin") ;for 'pcre-config'
+           pkg-config))
     (inputs
-     `(("glib" ,glib)
-       ("rasqal" ,rasqal)
-       ("libxml2" ,libxml2)
-       ("raptor2" ,raptor2)
-       ("readline" ,readline)
-       ("avahi" ,avahi)
-       ("cyrus-sasl" ,cyrus-sasl)
-       ("openssl" ,openssl)
-       ("util-linux" ,util-linux "lib")))
+     (list glib
+           rasqal
+           libxml2
+           raptor2
+           readline
+           avahi
+           cyrus-sasl
+           openssl
+           `(,util-linux "lib")))
     ;; http://www.4store.org has been down for a while now.
     (home-page "https://github.com/4store/4store")
     (synopsis "Clustered RDF storage and query engine")
@@ -243,12 +243,10 @@ either single machines or networked clusters.")
              #t)))
        #:test-target "test"))
     (inputs
-     `(("postgresql" ,postgresql)
-       ("util-linux" ,util-linux)))
+     (list postgresql util-linux))
     (native-inputs
      ;; For tests.
-     `(("ruby" ,ruby)
-       ("which" ,which)))
+     (list ruby which))
     (home-page "https://eradman.com/ephemeralpg/")
     (synopsis "Run temporary PostgreSQL databases")
     (description
@@ -274,11 +272,8 @@ garbage-collected after a configurable number of seconds (the default is
     (arguments
      '(#:tests? #f)) ;; No testsuite.
     (propagated-inputs
-     `(("ruby-httpclient" ,ruby-httpclient)
-       ("ruby-multi-json" ,ruby-multi-json)
-       ("ruby-progress_bar" ,ruby-progress_bar)
-       ("ruby-rubyzip" ,ruby-rubyzip)
-       ("ruby-thor" ,ruby-thor)))
+     (list ruby-httpclient ruby-multi-json ruby-progress_bar ruby-rubyzip
+           ruby-thor))
     (synopsis "Utility for dumping and restoring ElasticSearch indexes")
     (description
      "This package provides a utility for dumping the contents of an
@@ -424,12 +419,12 @@ ElasticSearch server")
                                  "lib/firebird/plugins/udr"))
                  #t)))))))
     (inputs
-     `(("boost" ,boost)
-       ("editline" ,editline)
-       ("icu4c" ,icu4c-67)
-       ("libtommath" ,libtommath)
-       ("ncurses" ,ncurses)
-       ("zlib" ,zlib)))
+     (list boost
+           editline
+           icu4c-67
+           libtommath
+           ncurses
+           zlib))
     (home-page "https://www.firebirdsql.org")
     (synopsis "Relational database with many ANSI SQL standard features")
     (description
@@ -481,7 +476,7 @@ database later.")
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON" "-DLEVELDB_BUILD_TESTS=ON")))
     (inputs
-     `(("snappy" ,snappy)))
+     (list snappy))
     (home-page "https://github.com/google/leveldb")
     (synopsis "Fast key-value storage library")
     (description
@@ -502,8 +497,7 @@ mapping from string keys to string values.")
         (base32 "0ii3z2mhjrimc6mv5z5x6bwp1s2bbzppja4m3pnmd5zgh9gs74gj"))))
     (build-system gnu-build-system)
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (home-page "https://memcached.org/")
     (synopsis "In-memory caching service")
     (description "Memcached is an in-memory key-value store.  It has a small
@@ -530,17 +524,16 @@ applications.")
                (search-patches "libmemcached-build-with-gcc7.patch"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("memcached" ,memcached)
-       ("libtool" ,libtool)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("perl" ,perl)
-       ("python-sphinx" ,python-sphinx))) ;to build the HTML doc.
+     (list memcached
+           libtool
+           autoconf
+           automake
+           bison
+           flex
+           perl
+           python-sphinx)) ;to build the HTML doc.
     (inputs
-     `(("libevent" ,libevent)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libevent cyrus-sasl))
     (outputs '("out" "doc"))
     (arguments
      '(#:tests? #f                      ;many tests fail and use too much time
@@ -600,12 +593,9 @@ the API, and provides features such as:
            (lambda _
              (invoke "memcached" "-d"))))))
     (native-inputs
-     `(("memcached" ,memcached)
-       ("python-nose" ,python-nose)))
+     (list memcached python-nose))
     (inputs
-     `(("libmemcached" ,libmemcached)
-       ("zlib" ,zlib)
-       ("cyrus-sasl" ,cyrus-sasl)))
+     (list libmemcached zlib cyrus-sasl))
     (home-page "http://sendapatch.se/projects/pylibmc/")
     (synopsis "Python client for memcached")
     (description
@@ -614,9 +604,6 @@ around TangentOrg’s libmemcached library, and can be used as a drop-in
 replacement for the code@{python-memcached} library.")
     (license license:bsd-3)))
 
-(define-public python2-pylibmc
-  (package-with-python2 python-pylibmc))
-
 (define-public litecli
  (package
   (name "litecli")
@@ -629,15 +616,14 @@ replacement for the code@{python-memcached} library.")
       (base32 "1yb706mgzizzijm1k0fbny98jf58qh5q6f2870rbplxlfla4w9sd"))))
   (build-system python-build-system)
   (propagated-inputs
-   `(("python-cli-helpers" ,python-cli-helpers)
-     ("python-click" ,python-click)
-     ("python-configobj" ,python-configobj)
-     ("python-prompt-toolkit" ,python-prompt-toolkit)
-     ("python-pygments" ,python-pygments)
-     ("python-sqlparse" ,python-sqlparse)))
+   (list python-cli-helpers
+         python-click
+         python-configobj
+         python-prompt-toolkit
+         python-pygments
+         python-sqlparse))
   (native-inputs
-   `(("python-mock" ,python-mock)
-     ("python-pytest" ,python-pytest)))
+   (list python-mock python-pytest))
   (home-page "https://litecli.com")
   (synopsis "CLI for SQLite databases")
   (description
@@ -659,16 +645,16 @@ auto-completion and syntax highlighting.")
     (arguments
      `(#:tests? #f))                    ; tests expect a running MySQL
     (propagated-inputs
-      `(("python-cli-helpers" ,python-cli-helpers)
-        ("python-click" ,python-click)
-        ("python-configobj" ,python-configobj)
-        ("python-cryptography" ,python-cryptography)
-        ("python-prompt-toolkit" ,python-prompt-toolkit)
-        ("python-pyaes" ,python-pyaes)
-        ("python-pygments" ,python-pygments)
-        ("python-pymysql" ,python-pymysql)
-        ("python-pyperclip" ,python-pyperclip)
-        ("python-sqlparse" ,python-sqlparse)))
+      (list python-cli-helpers
+            python-click
+            python-configobj
+            python-cryptography
+            python-prompt-toolkit
+            python-pyaes
+            python-pygments
+            python-pymysql
+            python-pyperclip
+            python-sqlparse))
     (home-page "https://www.mycli.net")
     (synopsis
       "Terminal Client for MySQL with AutoCompletion and Syntax Highlighting")
@@ -753,22 +739,20 @@ auto-completion and syntax highlighting.")
                             ,(string-append sed "/bin"))))
                        #t))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     (list bison perl pkg-config))
     (inputs
-     `(("boost" ,boost-for-mysql)
-       ("coreutils" ,coreutils)
-       ("gawk" ,gawk)
-       ("grep" ,grep)
-       ("libaio" ,libaio)
-       ("libtirpc" ,libtirpc)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl)
-       ("procps" ,procps)
-       ("rpcsvc-proto" ,rpcsvc-proto) ; rpcgen
-       ("sed" ,sed)
-       ("zlib" ,zlib)))
+     (list boost-for-mysql
+           coreutils
+           gawk
+           grep
+           libaio
+           libtirpc
+           ncurses
+           openssl
+           procps
+           rpcsvc-proto ; rpcgen
+           sed
+           zlib))
     (home-page "https://www.mysql.com/")
     (synopsis "Fast, easy to use, and popular database")
     (description
@@ -780,7 +764,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.5.8")
+    (version "10.5.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.com/MariaDB"
@@ -788,7 +772,7 @@ Language.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1s3vfm73911cddjhgpcbkya6nz7ag2zygg56qqzwscn5ybv28j7b"))
+                "1gg4h9ahmk78cx01zyw0fqr6hhd78fsyhs0s34p3gi9hkak1qkxb"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -807,9 +791,7 @@ Language.")
                               (unless (string-suffix? "CMakeLists.txt" file)
                                 (delete-file file)))
                             (append (find-files "extra/wolfssl")
-                                    (find-files "zlib")))
-                  #t))))
-    (replacement mariadb/fixed)
+                                    (find-files "zlib")))))))
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -864,6 +846,10 @@ Language.")
                         "/share/mysql/support-files")
          "-DINSTALL_MYSQLSHAREDIR=share/mysql"
          "-DINSTALL_SHAREDIR=share")
+       ;; The test suite has spurious failures (mostly timeouts) if run in
+       ;; parallel on various machines.  Only enable parallel tests on
+       ;; architectures which are likely to not have this issue.
+       #:parallel-tests? ,(target-x86-64?)
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'adjust-output-references
@@ -891,37 +877,32 @@ Language.")
                 "${INSTALL_INCLUDEDIR}"))
              (substitute* "cmake/mariadb_connector_c.cmake"
                (("\\\\\\$\\{CMAKE_INSTALL_PREFIX\\}/\\$\\{INSTALL_BINDIR\\}")
-                "${INSTALL_BINDIR}"))
-             #t))
+                "${INSTALL_BINDIR}"))))
          (add-after 'unpack 'adjust-tests
            (lambda _
              (let ((disabled-tests
                     '(;; These fail because root@hostname == root@localhost in
                       ;; the build environment, causing a user count mismatch.
                       ;; See <https://jira.mariadb.org/browse/MDEV-7761>.
-                      "funcs_1.is_columns_mysql"
-                      "main.join_cache"
                       "main.explain_non_select"
-                      "main.stat_tables"
-                      "main.stat_tables_innodb"
                       "main.upgrade_MDEV-19650"
                       "roles.acl_statistics"
 
+                      ;; Probably same as above, test failure reported upstream:
+                      ;; <https://jira.mariadb.org/browse/MDEV-26320>.
+                      "main.selectivity_no_engine"
+
                       ;; FIXME: This test checks various table encodings and
                       ;; fails because Guix defaults to UTF8 instead of the
                       ;; upstream default latin1_swedish_ci.  It's not easily
                       ;; substitutable because several encodings are tested.
-                      "main.sp2"
+                      "main.system_mysql_db"
 
                       ;; XXX: This test occasionally fails on i686-linux:
                       ;; <https://jira.mariadb.org/browse/MDEV-24458>
                       ,@(if (string-prefix? "i686" (%current-system))
                             '("main.myisampack")
-                            '())
-
-                      ;; This file contains a time bomb which makes it fail after
-                      ;; 2030-12-31.  See <https://bugs.gnu.org/34351> for details.
-                      "main.mysqldump"))
+                            '())))
 
                    ;; This file contains a list of known-flaky tests for this
                    ;; release.  Append our own items.
@@ -945,8 +926,7 @@ Language.")
 
                (substitute* "mysql-test/mysql-test-run.pl"
                  (("/bin/ls") (which "ls"))
-                 (("/bin/sh") (which "sh")))
-               #t)))
+                 (("/bin/sh") (which "sh"))))))
          (add-before 'configure 'disable-plugins
            (lambda _
              (let ((disable-plugin (lambda (name)
@@ -957,24 +937,25 @@ Language.")
                                          (format port "\n")))))
                    (disabled-plugins '(;; XXX: Causes a test failure.
                                        "disks")))
-               (for-each disable-plugin disabled-plugins)
-               #t)))
+               (for-each disable-plugin disabled-plugins))))
          (replace 'check
-           (lambda* (#:key (tests? #t) #:allow-other-keys)
+           (lambda* (#:key (tests? #t) parallel-tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "mysql-test"
                    (invoke "./mtr" "--verbose"
                            "--retry=3"
+                           "--suite=main"
                            "--testcase-timeout=40"
                            "--suite-timeout=600"
-                           "--parallel" (number->string (parallel-job-count))
+                           "--parallel" (number->string (if parallel-tests?
+                                                          (parallel-job-count)
+                                                          1))
                            ;; Skip the replication tests: they are very I/O
                            ;; intensive and frequently causes indeterministic
                            ;; failures even on powerful hardware.
                            "--skip-rpl"
                            "--skip-test-list=unstable-tests"))
-                 (format #t "test suite not run~%"))
-             #t))
+                 (format #t "test suite not run~%"))))
          (add-after
           'install 'post-install
           (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -1019,12 +1000,9 @@ Language.")
               (substitute* (list (string-append dev "/bin/mysql_config")
                                  (string-append dev "/lib/pkgconfig/mariadb.pc"))
                 (("-lssl -lcrypto" all)
-                 (string-append "-L" openssl "/lib " all)))
-
-              #t))))))
+                 (string-append "-L" openssl "/lib " all)))))))))
     (native-inputs
-     `(("bison" ,bison)
-       ("perl" ,perl)))
+     (list bison perl))
     (inputs
      `(("jemalloc" ,jemalloc)
        ("libaio" ,libaio)
@@ -1045,13 +1023,6 @@ Language.")
 as a drop-in replacement of MySQL.")
     (license license:gpl2)))
 
-(define mariadb/fixed
-  (package
-    (inherit mariadb)
-    (source (origin
-              (inherit (package-source mariadb))
-              (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
-
 (define-public mariadb-connector-c
   (package
     (name "mariadb-connector-c")
@@ -1067,7 +1038,7 @@ as a drop-in replacement of MySQL.")
        (sha256
         (base32 "0xb8fiissblxb319y5ifqqp86zblwis789ipb753pcb4zpnsaw82"))))
     (inputs
-     `(("openssl" ,openssl)))
+     (list openssl))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no tests
@@ -1092,9 +1063,7 @@ developed in C/C++ to MariaDB and MySQL databases.")
                (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
     (build-system cmake-build-system)
     (inputs
-     `(("check" ,check)
-       ("boost" ,boost)
-       ("openssl" ,openssl)))
+     (list check boost openssl))
     (home-page "https://github.com/codership/galera/")
     (synopsis "Extension to the MariaDB database server")
     (description
@@ -1106,15 +1075,14 @@ and high-availability (HA).")
 (define-public postgresql-13
   (package
     (name "postgresql")
-    (replacement postgresql-13.3)
-    (version "13.1")
+    (version "13.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "07z6zwr58dckaa97yl9ml240z83d1lhgaxw9aq49i8lsp21mqd0j"))
+                "1kf0gcsrl5n25rjlvkh87aywmn28kbwvakm5c7j1qpr4j01y34za"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1133,6 +1101,12 @@ and high-availability (HA).")
                                       "src/bin/psql/command.c")
                          (("/bin/sh") (which "sh")))
                        #t))
+         (add-before 'configure 'set-socket-dir
+           (lambda _
+             (substitute* '("src/include/pg_config_manual.h")
+               (("DEFAULT_PGSOCKET_DIR[^\n]*")
+                "DEFAULT_PGSOCKET_DIR \"/var/run/postgresql\""))
+             #t))
          (add-after 'build 'build-contrib
            (lambda _
              (invoke "make" "-C" "contrib")))
@@ -1155,20 +1129,6 @@ TIMESTAMP.  It also supports storage of binary large objects, including
 pictures, sounds, or video.")
     (license (license:x11-style "file://COPYRIGHT"))))
 
-(define-public postgresql-13.3
-  (package
-    (inherit postgresql-13)
-    (name "postgresql")
-    (version "13.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ftp.postgresql.org/pub/source/v"
-                                  version "/postgresql-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "18dliq7h2l8irffhyyhdmfwx3si515q6gds3cxdjb9n7m17lbn9w"))
-              (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))))
-
 (define-public postgresql-11
   (package
     (inherit postgresql-13)
@@ -1250,8 +1210,7 @@ pictures, sounds, or video.")
                (install-file "build/bin/pgloader"  bin))
              #t)))))
     (native-inputs
-     `(("buildapp" ,buildapp)
-       ("sbcl" ,sbcl)))
+     (list buildapp sbcl))
     (inputs
      `(("alexandria" ,sbcl-alexandria)
        ("cl-abnf" ,sbcl-cl-abnf)
@@ -1303,9 +1262,9 @@ CSV, DB3, iXF, SQLite, MS-SQL or MySQL to PostgreSQL.")
         (base32 "1ry8lxgdc1p3k7gbw20r405jqi5lvhi5wk83kxdbiv8xv3f5kh6q"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-unittest2" ,python-unittest2)))
+     (list python-unittest2))
     (inputs
-     `(("python-cryptography" ,python-cryptography)))
+     (list python-cryptography))
     (arguments
      `(#:tests? #f))                    ; tests expect a running MySQL
     (home-page "https://github.com/PyMySQL/PyMySQL/")
@@ -1406,7 +1365,7 @@ including field and record folding.")))
 (define-public rocksdb
   (package
     (name "rocksdb")
-    (version "6.11.4")
+    (version "6.25.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1415,35 +1374,37 @@ including field and record folding.")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0n19p9cd13jg0lnibrzwkxs4xlrhyj3knypkd2ic41arbds0bdnl"))
+                "14150kd7hk8jjwpm28bf3a0agrhyapbq9lgnl00l385vfb73wnzl"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; TODO: unbundle gtest.
                   (delete-file "build_tools/gnu_parallel")
                   (substitute* "Makefile"
-                    (("build_tools/gnu_parallel") "parallel"))
-                  #t))))
+                    (("build_tools/gnu_parallel") "parallel"))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc" "V=1"
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
                           ;; Ceph requires that RTTI is enabled.
                           "USE_RTTI=1"
-                          "date=1970-01-01" ; build reproducibly
-                          (string-append "INSTALL_PATH="
-                                         (assoc-ref %outputs "out"))
+                          ;; Don't pass '-march=native' to the compiler.
+                          "PORTABLE=1"
+                          ;; Use a deterministic date stamp.
+                          "build_date=1970-01-01"
 
                           ;; Running the full test suite takes hours and require
                           ;; a lot of disk space.  Instead we only run a subset
-                          ;; (see .travis.yml and Makefile).
-                          "ROCKSDBTESTS_END=db_tailing_iter_test")
+                          ;; that exercises platform-specific functionality.
+                          "ROCKSDBTESTS_PLATFORM_DEPENDENT=only")
        #:test-target "check_some"
        ;; Many tests fail on 32-bit platforms. There are multiple reports about
        ;; this upstream, but it's not going to be supported any time soon.
-       #:tests? (let ((system ,(or (%current-target-system)
-                                   (%current-system))))
-                  (or (string-prefix? "x86_64-linux" system)
-                      (string-prefix? "aarch64-linux" system)))
+       #:tests? ,(if (%current-target-system)
+                     #f
+                     (let ((system (%current-system)))
+                       (or (string-prefix? "x86_64-linux" system)
+                           (string-prefix? "aarch64-linux" system))))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-Makefile
@@ -1451,9 +1412,8 @@ including field and record folding.")))
              (substitute* "Makefile"
                ;; Don't depend on the static library when installing.
                (("install: install-static")
-                "install: install-shared")
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
-             #t))
+                "install:")
+               (("#!/bin/sh") (string-append "#!" (which "sh"))))))
          (delete 'configure)
          ;; The default target is only needed for tests and built on demand.
          (delete 'build)
@@ -1466,41 +1426,35 @@ including field and record folding.")))
              (let ((test-dir (string-append (getcwd) "/../test")))
                (mkdir test-dir)
                (setenv "TEST_TMPDIR" (canonicalize-path test-dir)))))
-         (add-before 'check 'disable-optimizations
-           (lambda _
-             ;; Prevent the build from passing '-march=native' to the compiler.
-             (setenv "PORTABLE" "1")
-             #t))
          (add-before 'check 'disable-failing-tests
            (lambda _
              (substitute* "Makefile"
                ;; These tests reliably fail due to "Too many open files".
                (("^[[:blank:]]+env_test[[:blank:]]+\\\\") "\\")
-               (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))
-             #t))
-         (add-after 'check 'build
+               (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))))
+         (add-after 'check 'clean
+           (lambda _
+             ;; Otherwise stale objects from the tests would interfere.
+             (invoke "make" "clean")))
+         (add-after 'clean 'build
            ;; The default build target is a debug build for tests. The
            ;; install target depends on the "shared_lib" release target
            ;; so we build it here for clarity.
            (lambda* (#:key (make-flags '()) parallel-build? #:allow-other-keys)
-               (apply invoke "make" "shared_lib"
-                      `(,@(if parallel-build?
-                              `("-j" ,(number->string (parallel-job-count)))
-                              '())
-                        ,@make-flags)))))))
+             (apply invoke "make" "shared_lib"
+                    `(,@(if parallel-build?
+                            `("-j" ,(number->string (parallel-job-count)))
+                            '())
+                      ,@make-flags)))))))
     (native-inputs
-     `(("parallel" ,parallel)
-       ("perl" ,perl)
-       ("procps" ,procps)
-       ("python" ,python-2)
-       ("which" ,which)))
+     (list parallel perl procps python which))
     (inputs
-     `(("bzip2" ,bzip2)
-       ("gflags" ,gflags)
-       ("jemalloc" ,jemalloc)
-       ("lz4" ,lz4)
-       ("snappy" ,snappy)
-       ("zlib" ,zlib)))
+     (list bzip2
+           gflags
+           jemalloc
+           lz4
+           snappy
+           zlib))
     (home-page "https://rocksdb.org/")
     (synopsis "Persistent key-value store for fast storage")
     (description
@@ -1529,13 +1483,9 @@ data in a single database.  RocksDB is partially based on @code{LevelDB}.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (inputs
-     `(("curl" ,curl)
-       ("glib" ,glib)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("readline" ,readline)))
+     (list curl glib libxml2 ncurses readline))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (arguments
      `(#:make-flags '("CC=gcc")
        #:phases
@@ -1609,20 +1559,20 @@ for example from a shell script.")
                                     path)))))
              #t)))))
     (native-inputs
-     `(("perl-capture-tiny" ,perl-capture-tiny)
-       ("perl-io-pager" ,perl-io-pager)
-       ("perl-module-build" ,perl-module-build)
-       ("perl-module-runtime" ,perl-module-runtime)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-dir" ,perl-test-dir)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-file" ,perl-test-file)
-       ("perl-test-file-contents" ,perl-test-file-contents)
-       ("perl-test-mockmodule" ,perl-test-mockmodule)
-       ("perl-test-mockobject" ,perl-test-mockobject)
-       ("perl-test-nowarnings" ,perl-test-nowarnings)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-capture-tiny
+           perl-io-pager
+           perl-module-build
+           perl-module-runtime
+           perl-path-class
+           perl-test-deep
+           perl-test-dir
+           perl-test-exception
+           perl-test-file
+           perl-test-file-contents
+           perl-test-mockmodule
+           perl-test-mockobject
+           perl-test-nowarnings
+           perl-test-warn))
     (inputs
      `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
        ("perl-clone" ,perl-clone)
@@ -1681,10 +1631,8 @@ which uses SQL to describe changes.")
                   "0x3wy40r93p0jv3nbwj9a77wa4ff697d13r0wffmm7q9h3mzsww8"))))
       (build-system python-build-system)
       (inputs
-       `(("python-cryptography" ,python-cryptography)
-         ("python-psycopg2" ,python-psycopg2)
-         ("python-pymysql" ,python-pymysql)
-         ("python-sqlalchemy" ,python-sqlalchemy)))
+       (list python-cryptography python-psycopg2 python-pymysql
+             python-sqlalchemy))
       (home-page "https://github.com/coffeeandscripts/sqlcrush")
       (synopsis "Text console-based database viewer and editor")
       (description
@@ -1717,12 +1665,12 @@ changes.")
                (invoke "./configure"
                        (string-append "--prefix=" out))))))))
     (native-inputs
-     `(;; TODO: Build the documentation.
-       ;; ("docbook-xsl" ,docbook-xsl)
-       ;; ("libxml2" ,libxml2)
-       ;; ("libxslt" ,libxslt)
-       ("python" ,python)                         ;for the Waf build system
-       ("which" ,which)))
+     (list ;; TODO: Build the documentation.
+           ;; ("docbook-xsl" ,docbook-xsl)
+           ;; ("libxml2" ,libxml2)
+           ;; ("libxslt" ,libxslt)
+           python ;for the Waf build system
+           which))
     (home-page "https://tdb.samba.org/")
     (synopsis "Trivial database")
     (description
@@ -1763,35 +1711,35 @@ extremely small.")
         (base32 "1rh7idjjbibc1zmiaaarask434lh0lx7f2xyfwmy37k9fa0xcpmh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-file-temp" ,perl-file-temp)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-package-stash" ,perl-package-stash)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-dbd-sqlite
+           perl-file-temp
+           perl-module-install
+           perl-package-stash
+           perl-test-deep
+           perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-config-any" ,perl-config-any)
-       ("perl-context-preserve" ,perl-context-preserve)
-       ("perl-data-dumper-concise" ,perl-data-dumper-concise)
-       ("perl-data-page" ,perl-data-page)
-       ("perl-dbi" ,perl-dbi)
-       ("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-module-find" ,perl-module-find)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-path-class" ,perl-path-class)
-       ("perl-scalar-list-utils" ,perl-scalar-list-utils)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-sql-abstract-classic" ,perl-sql-abstract-classic)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-text-balanced" ,perl-text-balanced)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-class-inspector
+           perl-config-any
+           perl-context-preserve
+           perl-data-dumper-concise
+           perl-data-page
+           perl-dbi
+           perl-devel-globaldestruction
+           perl-hash-merge
+           perl-module-find
+           perl-moo
+           perl-mro-compat
+           perl-namespace-clean
+           perl-path-class
+           perl-scalar-list-utils
+           perl-scope-guard
+           perl-sql-abstract-classic
+           perl-sub-name
+           perl-text-balanced
+           perl-try-tiny))
     (home-page "https://metacpan.org/release/DBIx-Class")
     (synopsis "Extensible and flexible object <-> relational mapper")
     (description "An SQL to OO mapper with an object API inspired by
@@ -1818,12 +1766,9 @@ single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
          "09b2jahn2x12qm4f7qm1jzsxbz7qn1czp6a3fnl5l2i3l4r5421p"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-cache-cache" ,perl-cache-cache)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-module-install" ,perl-module-install)))
+     (list perl-cache-cache perl-dbd-sqlite perl-module-install))
     (propagated-inputs
-     `(("perl-carp-clan" ,perl-carp-clan)
-       ("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-carp-clan perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-Cursor-Cached")
     (synopsis "Cursor with built-in caching support")
     (description "DBIx::Class::Cursor::Cached provides a cursor class with
@@ -1844,9 +1789,9 @@ built-in caching support.")
          "1w47rh2241iy5x3a9bqsyd5kdp9sk43dksr99frzv4qn4jsazfn6"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)))
+     (list perl-module-install))
     (propagated-inputs
-     `(("perl-dbix-class" ,perl-dbix-class)))
+     (list perl-dbix-class))
     (home-page "https://metacpan.org/release/DBIx-Class-IntrospectableM2M")
     (synopsis "Introspect many-to-many relationships")
     (description "Because the many-to-many relationships are not real
@@ -1871,40 +1816,40 @@ introspected and examined.")
          "0r57fv71ypxafb85cpxph1hdqii7ipjwvc19yb6fpkvq2ggcssg8"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-config-any" ,perl-config-any)
-       ("perl-config-general" ,perl-config-general)
-       ("perl-dbd-sqlite" ,perl-dbd-sqlite)
-       ("perl-dbix-class-introspectablem2m" ,perl-dbix-class-introspectablem2m)
-       ("perl-module-install" ,perl-module-install)
-       ("perl-moose" ,perl-moose)
-       ("perl-moosex-markasmethods" ,perl-moosex-markasmethods)
-       ("perl-moosex-nonmoose" ,perl-moosex-nonmoose)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-pod" ,perl-test-pod)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-config-any
+           perl-config-general
+           perl-dbd-sqlite
+           perl-dbix-class-introspectablem2m
+           perl-module-install
+           perl-moose
+           perl-moosex-markasmethods
+           perl-moosex-nonmoose
+           perl-namespace-autoclean
+           perl-test-deep
+           perl-test-differences
+           perl-test-exception
+           perl-test-pod
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-class-unload" ,perl-class-unload)
-       ("perl-class-inspector" ,perl-class-inspector)
-       ("perl-class-accessor-grouped" ,perl-class-accessor-grouped)
-       ("perl-class-c3-componentised" ,perl-class-c3-componentised)
-       ("perl-carp-clan" ,perl-carp-clan)
-       ("perl-data-dump" ,perl-data-dump)
-       ("perl-dbix-class" ,perl-dbix-class)
-       ("perl-hash-merge" ,perl-hash-merge)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-lingua-en-inflect-phrase" ,perl-lingua-en-inflect-phrase)
-       ("perl-lingua-en-inflect-number" ,perl-lingua-en-inflect-number)
-       ("perl-lingua-en-tagger" ,perl-lingua-en-tagger)
-       ("perl-namespace-clean" ,perl-namespace-clean)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-scope-guard" ,perl-scope-guard)
-       ("perl-string-camelcase" ,perl-string-camelcase)
-       ("perl-string-toidentifier-en" ,perl-string-toidentifier-en)
-       ("perl-sub-name" ,perl-sub-name)
-       ("perl-try-tiny" ,perl-try-tiny)))
+     (list perl-class-unload
+           perl-class-inspector
+           perl-class-accessor-grouped
+           perl-class-c3-componentised
+           perl-carp-clan
+           perl-data-dump
+           perl-dbix-class
+           perl-hash-merge
+           perl-list-moreutils
+           perl-lingua-en-inflect-phrase
+           perl-lingua-en-inflect-number
+           perl-lingua-en-tagger
+           perl-namespace-clean
+           perl-mro-compat
+           perl-scope-guard
+           perl-string-camelcase
+           perl-string-toidentifier-en
+           perl-sub-name
+           perl-try-tiny))
     (arguments `(#:tests? #f))          ;TODO: t/20invocations.t fails
     (home-page "https://metacpan.org/release/DBIx-Class-Schema-Loader")
     (synopsis "Create a DBIx::Class::Schema based on a database")
@@ -1927,10 +1872,9 @@ columns, primary keys, unique constraints and relationships.")
          "0kcfqq7g3832wiix0sbyvlc885qghjrp2ah3akn7h2lnb22fjwy9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-dbi" ,perl-dbi)))
+     (list perl-dbi))
     (propagated-inputs
-     `(("perl-dbi" ,perl-dbi)
-       ("postgresql" ,postgresql)))
+     (list perl-dbi postgresql))
     (home-page "https://metacpan.org/release/DBD-Pg")
     (synopsis "DBI PostgreSQL interface")
     (description "This package provides a PostgreSQL driver for the Perl5
@@ -1988,8 +1932,8 @@ columns, primary keys, unique constraints and relationships.")
                (base32
                 "1zljln5nh61gj3k22a1fv2vhx5l83waizmarwkh77hk6kzzmvrw9"))))
     (build-system perl-build-system)
-    (inputs `(("sqlite" ,sqlite)))
-    (propagated-inputs `(("perl-dbi" ,perl-dbi)))
+    (inputs (list sqlite))
+    (propagated-inputs (list perl-dbi))
     (synopsis "SQlite interface for Perl")
     (description "DBD::SQLite is a Perl DBI driver for SQLite, that includes
 the entire thing in the distribution.  So in order to get a fast transaction
@@ -2034,15 +1978,10 @@ libmysqlclient.  It will fill an array with long options, ready to be parsed by
         (base32 "0jhw91b23wc9bkfwcgvka4x5ddxk58m9bcp5ay7a3vx77nla09p9"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-module-install perl-test-deep perl-test-exception
+           perl-test-warn))
     (propagated-inputs
-     `(("perl-hash-merge" ,perl-hash-merge)
-       ("perl-moo" ,perl-moo)
-       ("perl-mro-compat" ,perl-mro-compat)
-       ("perl-text-balanced" ,perl-text-balanced)))
+     (list perl-hash-merge perl-moo perl-mro-compat perl-text-balanced))
     (home-page "https://metacpan.org/release/SQL-Abstract")
     (synopsis "Generate SQL from Perl data structures")
     (description "This module was inspired by the excellent DBIx::Abstract.
@@ -2066,12 +2005,9 @@ time your data changes.")
         (base32 "0a7g13hs3kdxrjn43sfli09mgsi9d6w0dfw6hlk268av17yisgaf"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-warn" ,perl-test-warn)))
+     (list perl-test-deep perl-test-exception perl-test-warn))
     (propagated-inputs
-     `(("perl-mro-compat" ,perl-mro-compat)
-       ("perl-sql-abstract" ,perl-sql-abstract)))
+     (list perl-mro-compat perl-sql-abstract))
     (home-page "https://metacpan.org/release/SQL-Abstract-Classic")
     (synopsis "Generate SQL from Perl data structures")
     (description
@@ -2102,14 +2038,10 @@ your data changes, as this module figures it out.")
         (base32 "0ppkx46nydzlnsxf9a8pkyb74wggfrdiiwafab143lrarlh88x0s"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-differences" ,perl-test-differences)
-       ("perl-test-exception" ,perl-test-exception)
-       ("perl-test-script" ,perl-test-script)))
+     (list perl-test-differences perl-test-exception perl-test-script))
     (propagated-inputs
-     `(("perl-class-accessor" ,perl-class-accessor)
-       ("perl-list-moreutils" ,perl-list-moreutils)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-sql-tokenizer" ,perl-sql-tokenizer)))
+     (list perl-class-accessor perl-list-moreutils perl-regexp-common
+           perl-sql-tokenizer))
     (home-page "https://metacpan.org/release/SQL-SplitStatement")
     (synopsis "Split SQL code into atomic statements")
     (description "This module tries to split any SQL code, even including
@@ -2179,7 +2111,7 @@ Driver.")
              "-DBUILD_SHARED_LIBS=ON")
        #:tests? #false))
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (home-page "https://nanodbc.io/")
     (synopsis "C++ wrapper for the native C ODBC API")
     (description "The goal for nanodbc is to make developers happy by providing
@@ -2267,8 +2199,8 @@ similar to BerkeleyDB, LevelDB, etc.")
                '(begin (delete-file-recursively "deps/jemalloc")))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("procps" ,procps)               ; for tests
-       ("tcl" ,tcl)))                   ; for tests
+     (list procps ; for tests
+           tcl))                   ; for tests
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -2339,7 +2271,7 @@ one-to-one, while still providing an idiomatic interface.")
         "--disable-opt" ;"-march=native". XXX this also turns off -O0.
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs (list zlib))
     (home-page "https://fallabs.com/kyotocabinet/")
     (synopsis
      "Kyoto Cabinet is a modern implementation of the DBM database")
@@ -2368,7 +2300,7 @@ database and supports many programming languages.  It is a NoSQL database.")
         (string-append "LDFLAGS=-Wl,-rpath="
                        (assoc-ref %outputs "out") "/lib"))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "http://fallabs.com/tokyocabinet/")
     (synopsis "Tokyo Cabinet is a modern implementation of the DBM database")
     (description
@@ -2404,9 +2336,7 @@ organized in hash table, B+ tree, or fixed-length array.")
                (("test/fops") ""))
              #t)))))
     (inputs
-     `(("lz4" ,lz4)
-       ("zlib" ,zlib)
-       ("snappy" ,snappy)))
+     (list lz4 zlib snappy))
     (home-page "http://source.wiredtiger.com/")
     (synopsis "NoSQL data engine")
     (description
@@ -2453,14 +2383,11 @@ trees (LSM), for sustained throughput under random insert workloads.")
                             (assoc-ref %build-inputs "wiredtiger")))
        #:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)))
+     (list autoconf automake pkg-config))
     (inputs
-     `(("wiredtiger" ,wiredtiger-3)
-       ("guile" ,guile-2.2)))
+     (list wiredtiger-3 guile-2.2))
     (propagated-inputs
-     `(("guile-bytestructures" ,guile-bytestructures)))
+     (list guile-bytestructures))
     (synopsis "WiredTiger bindings for GNU Guile")
     (description
      "This package provides Guile bindings to the WiredTiger ``NoSQL''
@@ -2480,8 +2407,8 @@ database.")
       (sha256
         (base32 "1ab6rm2b8lz0g3gc8k9y79gkgajyby0zpybkdg9mk4g35y9bmyfd"))))
   (build-system perl-build-system)
-  (inputs `(("bdb" ,bdb)))
-  (native-inputs `(("perl-test-pod" ,perl-test-pod)))
+  (inputs (list bdb))
+  (native-inputs (list perl-test-pod))
   (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-before
@@ -2572,7 +2499,7 @@ virtual address space — not physical RAM.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (build-system gnu-build-system)
-    (inputs `(("lmdb" ,lmdb)))
+    (inputs (list lmdb))
     (home-page "https://github.com/hoytech/lmdbxx")
     (synopsis "C++11 wrapper for the LMDB embedded B+ tree database library")
     (description "@code{lmdbxx} is a comprehensive @code{C++} wrapper for the
@@ -2596,7 +2523,7 @@ semantics.")
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))
-    (inputs `(("postgresql" ,postgresql)))
+    (inputs (list postgresql))
     (arguments
      `(#:tests? #f   ; # FAIL:  1
        #:phases
@@ -2629,9 +2556,9 @@ on another machine, accessed via TCP/IP.")
     (arguments
      `(#:tests? #f))                    ; fails to import test data
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (native-inputs
-     `(("python-cython" ,python-cython)))
+     (list python-cython))
     (home-page "https://github.com/coleifer/peewee/")
     (synopsis "Small object-relational mapping utility")
     (description
@@ -2645,51 +2572,145 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
 (define-public python2-peewee
   (package-with-python2 python-peewee))
 
+(define-public python-pypika-tortoise
+  (package
+    (name "python-pypika-tortoise")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pypika-tortoise" version))
+       (sha256
+        (base32 "0g4z0lz739nk04b405ynqpd3y1z5nfyxjz9hqgxcw3jydsjx0cb8"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/tortoise/pypika-tortoise")
+    (synopsis "Pypika fork for tortoise-orm")
+    (description "Pypika-tortoise is a fork of pypika which has been
+streamlined for its use in the context of tortoise-orm.  It removes support
+for many database kinds that tortoise-orm doesn't need, for example.")
+    (license license:asl2.0)))
+
+(define-public python-sphinxcontrib-asyncio
+  (package
+    (name "python-sphinxcontrib-asyncio")
+    (version "0.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "sphinxcontrib-asyncio" version))
+        (sha256
+          (base32 "0bkj010ygsr7m769llf2aq4bbjfhdwqrrabi98j8gpvyzvh2dzcr"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no test suite
+    (propagated-inputs (list python-sphinx))
+    (home-page "https://github.com/aio-libs/sphinxcontrib-asyncio")
+    (synopsis "Sphinx extension to support coroutines in markup")
+    (description "This package is a Sphinx extension providing additional
+coroutine-specific markup.")
+    (license license:asl2.0)))
+
+(define-public python-asyncpg
+  (package
+    (name "python-asyncpg")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "asyncpg" version))
+       (sha256
+        (base32 "1in0q6iffpl8ag6ady4bvwnn40igh10cpp4xgm426j1lqdis0byx"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-typing-extensions))
+    (native-inputs
+     (list postgresql
+           python-cython
+           python-flake8
+           python-pycodestyle
+           python-pytest
+           python-sphinx
+           python-sphinx-rtd-theme
+           python-sphinxcontrib-asyncio
+           python-uvloop))
+    (home-page "https://github.com/MagicStack/asyncpg")
+    (synopsis "Fast PostgreSQL database client library for Python")
+    (description "@code{asyncpg} is a database interface library designed
+specifically for PostgreSQL and Python/asyncio.  @code{asyncpg} is an
+efficient, clean implementation of PostgreSQL server binary protocol for use
+with Python's asyncio framework.")
+    (license license:asl2.0)))
+
+(define-public python-asyncmy
+  (package
+    (name "python-asyncmy")
+    (version "0.2.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "asyncmy" version))
+        (sha256
+          (base32 "19p81jd4w7m7v2x1jdrwibp67wzqx1a7rdw5n4qqmch3iffp97vn"))))
+    (build-system python-build-system)
+    (native-inputs (list python-cython))
+    (home-page "https://github.com/long2ice/asyncmy")
+    (synopsis "Fast MySQL driver for Python")
+    (description "@code{asyncmy} is a fast @code{asyncio} MySQL driver, which
+reuses most of @code{pymysql} and @code{aiomysql} but rewrites the core
+protocol with Cython for performance.")
+    (license license:asl2.0)))
+
+(define-public python-aiomysql
+  (package
+    (name "python-aiomysql")
+    (version "0.0.21")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "aiomysql" version))
+        (sha256
+          (base32 "0b442d0jb82z3lk19ylmm64ix88ppz7gay08bxld538ivg06j5c1"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))           ;test suite requires docker
+    (propagated-inputs (list python-pymysql))
+    (home-page "https://github.com/aio-libs/aiomysql")
+    (synopsis "MySQL driver for Python")
+    (description "@code{aiomysql} is a driver for accessing a MySQL database
+from the @code{asyncio} Python framework.  It depends on and reuses most parts
+of PyMySQL.  @code{aiomysql} tries to preserve the same API as the
+@code{aiopg} library.")
+    (license license:expat)))
+
 (define-public python-tortoise-orm
   (package
     (name "python-tortoise-orm")
-    (version "0.16.21")
+    (version "0.17.8")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tortoise-orm" version))
        (sha256
-        (base32
-         "1dallk0q8q4v37klm0v3rppf2w8sjkqmypc1w8r9rraqxg1ylacp"))))
+        (base32 "1gzgiypln7lck3p95vk3i8rdx1bjbmmlcpb8xpba8cjdjvlj0l0z"))))
     (build-system python-build-system)
-    (arguments
-     `(#:tests? #f ; Pypi does not have tests and Git snapshot depends on
-                   ; poetry.
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'relax-version-requirements
-                    (lambda _
-                      (substitute* "setup.py"
-                        (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
-                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite")
-                        (("pytz>=2020\\.4,<2021\\.0") "pytz")
-                        ;; Not required, since ciso8601 is used.
-                        (("'iso8601>=0\\.1\\.13,<0\\.2\\.0',") ""))
-                      #t)))))
-    (native-inputs
-     `(("python-asynctest" ,python-asynctest)
-       ("python-nose2" ,python-nose2)))
+    ;; The test suite relies on asynctest, which is abandoned and doesn't
+    ;; support Python >= 3.8.
+    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-aiosqlite" ,python-aiosqlite)
-       ("python-pypika" ,python-pypika)
-       ("python-ciso8601" ,python-ciso8601)
-       ("python-pytz" ,python-pytz)
-       ("python-typing-extensions"
-        ,python-typing-extensions)))
-    (home-page
-     "https://github.com/tortoise/tortoise-orm")
-    (synopsis
-     "Easy async ORM for python, built with relations in mind")
-    (description
-     "Tortoise ORM is an easy-to-use asyncio ORM (Object Relational Mapper)
-inspired by Django.  Tortoise ORM was build with relations in mind and
-admiration for the excellent and popular Django ORM.  It’s engraved in its
-design that you are working not with just tables, you work with relational
-data.")
+     (list python-aiomysql
+           python-aiosqlite
+           python-asyncmy
+           python-asyncpg
+           python-ciso8601
+           python-iso8601
+           python-pypika-tortoise
+           python-pytz
+           python-rapidjson
+           python-uvloop))
+    (home-page "https://github.com/tortoise/tortoise-orm")
+    (synopsis "Asynchronous Object Relational Mapper (ORM) for Python")
+    (description "Tortoise ORM is an easy-to-use asyncio ORM (Object
+Relational Mapper) inspired by Django.  Tortoise ORM was built with relations
+in mind and admiration for the excellent and popular Django ORM.  It's
+engraved in its design that you are working not with just tables, you work
+with relational data.")
     (license license:asl2.0)))
 
 (define-public sqlcipher
@@ -2709,7 +2730,7 @@ data.")
      `(("libcrypto" ,openssl)
        ("libtcl8.6" ,tcl))) ; required for running the tests
     (native-inputs
-     `(("tcl" ,tcl)))
+     (list tcl))
     (arguments
      '(#:configure-flags
        '("--enable-tempstore=yes"
@@ -2756,7 +2777,7 @@ development.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(;; No unit tests exist.
        #:tests? #f))
@@ -2782,7 +2803,7 @@ for ODBC.")
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (inputs
-     `(("unixodbc" ,unixodbc)))
+     (list unixodbc))
     (arguments
      `(#:tests? #f))                    ; no unit tests exist
     (home-page "https://github.com/mkleehammer/pyodbc")
@@ -2810,14 +2831,14 @@ for ODBC.")
          "0gwcpp9y09xhs21g7my2fs8ncb8i6ahlyixcx8jd3q97jbzj441l"))))
     (build-system gnu-build-system)
     (inputs
-     `(("glib" ,glib)))
+     (list glib))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
-       ("pkg-config" ,pkg-config)
-       ("txt2man" ,txt2man)
-       ("which" ,which)))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           txt2man
+           which))
     (home-page "http://mdbtools.sourceforge.net/")
     (synopsis "Read Microsoft Access databases")
     (description "MDB Tools is a set of tools and applications to read the
@@ -2849,7 +2870,7 @@ etc., and an SQL engine for performing simple SQL queries.")
                   #t))))
     (build-system python-build-system)
     (inputs
-     `(("lmdb" ,lmdb)))
+     (list lmdb))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -2889,19 +2910,19 @@ Memory-Mapped Database} (LMDB), a high-performance key-value store.")
     ;; does not contain setup.py.  How to test?
     (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-backpack" ,python-backpack)
-       ("python-blinker" ,python-blinker)
-       ("python-cleo" ,python-cleo)
-       ("python-faker" ,python-faker)
-       ("python-inflection" ,python-inflection)
-       ("python-lazy-object-proxy" ,python-lazy-object-proxy)
-       ("python-pendulum" ,python-pendulum)
-       ("python-pyaml" ,python-pyaml)
-       ("python-pygments" ,python-pygments)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-simplejson" ,python-simplejson)
-       ("python-six" ,python-six)
-       ("python-wrapt" ,python-wrapt)))
+     (list python-backpack
+           python-blinker
+           python-cleo
+           python-faker
+           python-inflection
+           python-lazy-object-proxy
+           python-pendulum
+           python-pyaml
+           python-pygments
+           python-pyyaml
+           python-simplejson
+           python-six
+           python-wrapt))
     (home-page "https://orator-orm.com/")
     (synopsis "ActiveRecord ORM for Python")
     (description
@@ -2940,10 +2961,7 @@ implementation for Python.")
                          '("libvirtuoso-t.a"
                            "libvirtuoso-t.la"))))))))
     (inputs
-     `(("openssl" ,openssl)
-       ("net-tools" ,net-tools)
-       ("readline" ,readline)
-       ("zlib" ,zlib)))
+     (list openssl net-tools readline zlib))
     (home-page "http://vos.openlinksw.com/owiki/wiki/VOS/")
     (synopsis "Multi-model database system")
     (description "Virtuoso is a scalable cross-platform server that combines
@@ -2966,11 +2984,10 @@ and web services platform functionality.")
          "177dfxsmk3k4cih6fh6v8d91bh4nqx7ns6pc07w7m7i3cvdx3c8n"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-pyyaml" ,python-pyyaml)
-       ;; Not listed in setup.py, but used in ccmlib/node.py for full
-       ;; functionality
-       ("python-psutil" ,python-psutil)
-       ("python-six" ,python-six)))
+     (list python-pyyaml
+           ;; Not listed in setup.py, but used in ccmlib/node.py for full
+           ;; functionality
+           python-psutil python-six))
     (home-page "https://github.com/pcmanus/ccm")
     (synopsis "Cassandra Cluster Manager for Apache Cassandra clusters on
 localhost")
@@ -2995,7 +3012,7 @@ on localhost.")
         "1424gwq9sil2ffmnizk60q36vydkv8rxs6m7xs987kz8cdc37lqp"))))
     (build-system python-build-system)
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:python ,python-2 ; incompatible with Python 3
        #:tests? #f)) ; no test target
@@ -3018,11 +3035,10 @@ Database API 2.0T.")
        (base32 "031jbd0svrvwr3n52iibp9mkwsj9wicnck45yd26da5kmsfkas6p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-cython" ,python-cython) ; for C extensions
-       ("python-pytest" ,python-pytest)
-       ("python-mock"   ,python-mock))) ; for tests
+     (list python-cython ; for C extensions
+           python-pytest python-mock)) ; for tests
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)))
+     (list python-greenlet))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3068,8 +3084,7 @@ simple and Pythonic domain language.")
          "1bppjmv7v7m0q8gwg791pgxbx4ay7mna0zq204pn9vw28kfxcrf6"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-mypy" ,python-mypy)
-       ("python-typing-extensions" ,python-typing-extensions)))
+     (list python-mypy python-typing-extensions))
     (home-page "https://github.com/dropbox/sqlalchemy-stubs")
     (synopsis "SQLAlchemy stubs and mypy plugin")
     (description "This package contains type stubs and a mypy plugin to
@@ -3097,14 +3112,10 @@ framework.")
        ;;     (lambda _
        ;;       (zero? (system* "py.test" "sqlalchemy_utils" "tests")))))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (native-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-flexmock" ,python-flexmock)
-       ("python-psycopg2" ,python-psycopg2)
-       ("python-pytest" ,python-pytest)
-       ("python-pytz" ,python-pytz)))
+     (list python-dateutil python-flexmock python-psycopg2 python-pytest
+           python-pytz))
     (home-page "https://github.com/kvesteri/sqlalchemy-utils")
     (synopsis "Various utility functions for SQLAlchemy")
     (description
@@ -3150,11 +3161,9 @@ doctest_optionflags=IGNORE_EXCEPTION_DETAIL
                       (invoke "pytest" "-vv" "--doctest-modules"
                               "alchemy_mock/"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)))
+     (list python-mock python-pytest))
     (propagated-inputs
-     `(("python-six" ,python-six)
-       ("python-sqlalchemy" ,python-sqlalchemy)))
+     (list python-six python-sqlalchemy))
     (synopsis "Mock helpers for SQLAlchemy")
     (description
      "This package provides mock helpers for SQLAlchemy that makes it easy
@@ -3168,13 +3177,13 @@ this library provides functions to facilitate such comparisons.")
 (define-public python-alembic
   (package
     (name "python-alembic")
-    (version "1.7.1")
+    (version "1.7.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "alembic" version))
        (sha256
-        (base32 "1ys0a44gh544xpbzz6r5xvz3msim74f9qklyfnw0bhn9vk9n9adf"))))
+        (base32 "0lxi2g2025lz5k7k5dd5fc1lfijqi2yw6qqyjzp073z6laa8cckw"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -3182,14 +3191,9 @@ this library provides functions to facilitate such comparisons.")
                     (lambda _
                       (invoke "pytest" "-vv"))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest-cov" ,python-pytest-cov)))
+     (list python-mock python-pytest-cov))
     (propagated-inputs
-     `(("python-dateutil" ,python-dateutil)
-       ("python-importlib-resources" ,python-importlib-resources) ;Python < 3.9
-       ("python-sqlalchemy" ,python-sqlalchemy)
-       ("python-mako" ,python-mako)
-       ("python-editor" ,python-editor)))
+     (list python-dateutil python-sqlalchemy python-mako python-editor))
     (home-page "https://bitbucket.org/zzzeek/alembic")
     (synopsis "Database migration tool for SQLAlchemy")
     (description
@@ -3214,7 +3218,7 @@ SQLAlchemy Database Toolkit for Python.")
                     (lambda _
                       (invoke "pytest"))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/vivainio/pickleshare")
     (synopsis "Tiny key value database with concurrency support")
     (description
@@ -3232,13 +3236,14 @@ PickleShare.")
   (let ((pickleshare (package-with-python2
                       (strip-python2-variant python-pickleshare))))
     (package (inherit pickleshare)
-      (propagated-inputs `(("python2-pathlib2" ,python2-pathlib2)
-                           ,@(package-propagated-inputs pickleshare))))))
+      (propagated-inputs (modify-inputs (package-propagated-inputs
+                                                        pickleshare)
+                           (prepend python2-pathlib2))))))
 
 (define-public python-apsw
   (package
     (name "python-apsw")
-    (version "3.31.1-r1")
+    (version "3.36.0-r1")
     (source
       (origin
         (method url-fetch)
@@ -3246,12 +3251,12 @@ PickleShare.")
                             "/download/" version "/apsw-" version ".zip"))
         (sha256
           (base32
-           "1gap5lr6c7bp134nzvfwr693i6d0fqyaysg3ms2cayjldv616yfx"))))
+           "0w8q73147hv77dlpqrx6h1gx03acc8xqhvdpfp6vkffdm0wmqd8p"))))
     (build-system python-build-system)
     (native-inputs
-     `(("unzip" ,unzip)))
+     (list unzip))
     (inputs
-     `(("sqlite" ,sqlite)))
+     (list sqlite))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -3301,9 +3306,9 @@ translate the complete SQLite API into Python.")
                           (format #t "test suite not run~%"))
                       #t)))))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (native-inputs
-     `(("python-aiounittest" ,python-aiounittest)))
+     (list python-aiounittest))
     (home-page "https://github.com/jreese/aiosqlite")
     (synopsis
      "Asyncio bridge for sqlite3")
@@ -3371,7 +3376,7 @@ designed to be easy and intuitive to use.")
      ;; and a running postgresql database management service.
      `(#:tests? #f)) ; TODO re-enable after providing a test-db.
     (inputs
-     `(("postgresql" ,postgresql))) ; libpq
+     (list postgresql)) ; libpq
     (home-page "http://initd.org/psycopg/")
     (synopsis "Python PostgreSQL adapter")
     (description
@@ -3403,10 +3408,10 @@ designed to be easy and intuitive to use.")
                             (invoke "pytest" "-vv"))
                           (format #t "test suite not run~%")))))))
     (propagated-inputs
-      `(("python-sqlalchemy" ,python-sqlalchemy)))
+      (list python-sqlalchemy))
     (native-inputs
      ;; For tests.
-      `(("python-pytest" ,python-pytest)))
+      (list python-pytest))
     (home-page "https://bitbucket.org/estin/sadisplay")
     (synopsis "SQLAlchemy schema displayer")
     (description "This package provides a program to build Entity
@@ -3414,9 +3419,6 @@ Relationship diagrams from a SQLAlchemy model (or directly from the
 database).")
     (license license:bsd-3)))
 
-(define-public python2-sadisplay
-  (package-with-python2 python-sadisplay))
-
 (define-public yoyo-migrations
   (package
     (name "yoyo-migrations")
@@ -3438,8 +3440,7 @@ database).")
      ;; fails to connect to it.
      '(#:tests? #f))
     (propagated-inputs
-     `(("python-sqlparse" ,python-sqlparse)
-       ("python-tabulate" ,python-tabulate)))
+     (list python-sqlparse python-tabulate))
     (home-page "https://ollycope.com/software/yoyo/latest/")
     (synopsis "Database migrations with SQL")
     (description
@@ -3500,20 +3501,20 @@ parsing code in hiredis.  It primarily speeds up parsing of multi bulk replies."
 (define-public python-fakeredis
   (package
     (name "python-fakeredis")
-    (version "1.2.1")
+    (version "1.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fakeredis" version))
        (sha256
         (base32
-         "1s12mn4q4hz7402139khn9fx56kibj7nn0d6w81hn0zs07b90wpc"))))
+         "0wacd3f558vzsrpdvgvdwy9pp6crxf8hxblz30zbsv1k63j15gf9"))))
     (build-system python-build-system)
     (arguments
      ;; no tests
      `(#:tests? #f))
     (propagated-inputs
-      `(("python-sortedcontainers" ,python-sortedcontainers)))
+     (list python-packaging python-redis python-sortedcontainers))
     (home-page "https://github.com/jamesls/fakeredis")
     (synopsis "Fake implementation of redis API for testing purposes")
     (description
@@ -3526,9 +3527,6 @@ talk to an external server such as redis.  This module can be used as a
 reasonable substitute.")
     (license license:bsd-3)))
 
-(define-public python2-fakeredis
-  (package-with-python2 python-fakeredis))
-
 (define-public python-redis
   (package
     (name "python-redis")
@@ -3583,12 +3581,9 @@ reasonable substitute.")
                                                       (getenv "PATH")))
                         (invoke "pytest" "-vv")))))))
     (native-inputs
-     `(("python-mock" ,python-mock)
-       ("python-pytest" ,python-pytest)
-       ("redis" ,redis)))
+     (list python-mock python-pytest redis))
     (propagated-inputs
-     `(("python-click" ,python-click)
-       ("python-redis" ,python-redis)))
+     (list python-click python-redis))
     (home-page "https://python-rq.org/")
     (synopsis "Simple job queues for Python")
     (description
@@ -3624,11 +3619,9 @@ is designed to have a low barrier to entry.")
                          (which "env")))
                       (invoke "./run_tests.py"))))))
     (native-inputs
-     `(("redis" ,redis)
-       ("which" ,which)))
+     (list redis which))
     (propagated-inputs
-     `(("python-croniter" ,python-croniter)
-       ("python-rq" ,python-rq)))
+     (list python-croniter python-rq))
     (synopsis "Job scheduling capabilities for RQ (Redis Queue)")
     (description
      "This package provides job scheduling capabilities to @code{python-rq}
@@ -3691,7 +3684,7 @@ is designed to have a low barrier to entry.")
                            (string-append output sitedir))
                          (list python out))))))))))
     (native-inputs
-     `(("python-pytest" ,python-pytest)))
+     (list python-pytest))
     (home-page "https://github.com/andialbrecht/sqlparse")
     (synopsis "Non-validating SQL parser")
     (description "Sqlparse is a non-validating SQL parser for Python.  It
@@ -3715,9 +3708,6 @@ provides support for parsing, splitting and formatting SQL statements.")
 transforms idiomatic python function calls to well-formed SQL queries.")
     (license license:bsd-3)))
 
-(define-public python2-sql
-  (package-with-python2 python-sql))
-
 (define-public python-pypika
   (package
     (name "python-pypika")
@@ -3733,7 +3723,7 @@ transforms idiomatic python function calls to well-formed SQL queries.")
                "001pg36sw9a36zdd1kccbymcxndphjcjbbrsy6ri7ng8h4dgz549"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-parameterized" ,python-parameterized)))
+     (list python-parameterized))
     (home-page "https://github.com/kayak/pypika")
     (synopsis "SQL query builder API for Python")
     (description
@@ -3856,13 +3846,10 @@ the SQL language using a syntax that reflects the resulting query.")
        ("xsimd" ,xsimd)))
     ;; These are all listed under Requires.private in arrow.pc
     (propagated-inputs
-     `(("apache-thrift" ,apache-thrift "lib")
-       ("lz4" ,lz4)
-       ("utf8proc" ,utf8proc)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")))
+     (list `(,apache-thrift "lib") lz4 utf8proc zlib
+           `(,zstd "lib")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (outputs '("out" "lib" "include"))
     (home-page "https://arrow.apache.org/")
     (synopsis "Columnar in-memory analytics")
@@ -3943,7 +3930,7 @@ other traditional Python scientific computing packages.")
                 "0ngmlvi320c5gsxab0s7qgq0ck4jdlcwvb6lbjhnfprafdp56vvx"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-urllib3" ,python-urllib3)))
+     (list python-urllib3))
     (home-page "https://github.com/crate/crate-python")
     (synopsis "CrateDB Python client")
     (description
@@ -3987,10 +3974,8 @@ simultaneous database connections by using this framework.")
                 "0m680h8cc4428xin4p733azysamzgzcmv4psjvraykrsaz6ymlj3"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(;; For tests.
-       ("inetutils" ,inetutils)
-       ("glibc-locales" ,glibc-locales)
-       ("mariadb" ,mariadb)))
+     (list ;; For tests.
+           inetutils glibc-locales mariadb))
     (inputs
      `(("libdbi" ,libdbi)
        ("mariadb:dev" ,mariadb "dev")
@@ -4118,7 +4103,7 @@ connecting to MS SQL and Sybase servers over TCP/IP.")
     ;; have a setup.py file (only pyproject).
     (arguments `(#:tests? #f))
     (propagated-inputs
-     `(("python-typing-extensions" ,python-typing-extensions)))
+     (list python-typing-extensions))
     (home-page "https://github.com/msiemens/tinydb")
     (synopsis "TinyDB is a lightweight document oriented database")
     (description