Получить свойства столбца для одной таблицы для копирования [duplicate]

Этот ответ должен быть довольно коротким и сладким, чтобы ответить (часть) озаглавленного вопроса. Если вы хотите получить более подробный ответ, объясняющий, почему вы должны их там поместить, пожалуйста, перейдите здесь .


Общее правило для размещения typename в основном, когда вы используете параметр шаблона, и хотите получить доступ к вложенному typedef или с использованием псевдонима, например:

template
struct test {
    using type = T; // no typename required
    using underlying_type = typename T::type // typename required
};

Обратите внимание, что это также относится к метафункциям или вещи, которые также принимают общие параметры шаблона. Однако, если предоставленный параметр шаблона является явным типом, вам не нужно указывать typename, например:

template
struct test {
    // typename required
    using type = typename std::conditional::type;
    // no typename required
    using integer = std::conditional::type;
};

Общие правила добавления определителя template в основном аналогичны, за исключением они обычно включают шаблонные функции-члены (статические или другие) структуры / класса, которые сами шаблоны, например:

Учитывая эту структуру и функцию:

template
struct test {
    template
    void get() const {
        std::cout << "get\n";
    }
};

template
void func(const test& t) {
    t.get(); // error
}

Попытка доступа t.get() изнутри функции приведет к ошибке:

main.cpp:13:11: error: expected primary-expression before 'int'
     t.get();
           ^
main.cpp:13:11: error: expected ';' before 'int'

Таким образом, в этом контексте вам понадобится ключевое слово template заранее и вызвать его так:

t.template get()

Таким образом, компилятор будет анализировать это правильно, а не t.get < int.

8
задан gustafbstrom 11 November 2015 в 09:31
поделиться

3 ответа

Откройте database2 с помощью инструмента командной строки sqlite3 и прочитайте определение таблицы с помощью команды .schema t2. (Альтернативно, используйте любой другой инструмент, который позволяет прочитать определение таблицы.)

Затем откройте database1, attach другую базу данных с помощью команды:

ATTACH 'database2file' AS db2;

затем создайте таблицу t2 и скопируйте данные с помощью:

INSERT INTO t2 SELECT * FROM db2.t2;
30
ответ дан CL. 19 August 2018 в 04:05
поделиться

Команда оболочки:

sqlite3 database1

В оболочке SQLite:

sqlite> ATTACH 'database2' AS db2;
sqlite> CREATE TABLE t1 AS SELECT * FROM db2.t2;
6
ответ дан Daniel Böhmer 19 August 2018 в 04:05
поделиться

Вы можете использовать команду sqlite3 .dump для вывода вывода дампа в другой db. Он принимает необязательный аргумент с именем таблицы.

db1=~/mydb1.sqlite 
db2=~/mydb2.sqlite
t=t2

sqlite3 "$db2" ".dump $t" | sqlite3 "$db1"

Если у вас нет общих таблиц в обеих базах данных, вы можете оставить имя таблицы и скопировать все таблицы.

Если таблицы большие, это может быть медленным, потому что это сделает INSERT. Если они огромны, и это действительно слишком медленно, возможно, .import будет быстрее. Вы можете попробовать что-то вроде

sqlite3 "$db2" ".schema $t" | sqlite3 "$db1"
sqlite3 "$db2" "SELECT * FROM $t" | sqlite3 "$db1" ".import /dev/stdin $t"
4
ответ дан mivk 19 August 2018 в 04:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: