Вы можете это сделать полностью, это просто проблема с порядком:
[ unicode(x.strip()) if x is not None else '' for x in row ]
Обратите внимание, что это фактически использует другую конструкцию языка, условное выражение , которое само по себе не является часть синтаксиса понимания , в то время как if
после for…in
является частью понятий списка и используется для filter элементов из исходной итерации.
Условные выражения могут использоваться во всех ситуациях, когда вы хотите выбрать между двумя значениями выражения на основе некоторого условия. Это делает то же, что и трёхмерный оператор ?:
, который существует на других языках . Например:
value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
Я просто посмотрел на SQL AIR API, и существует attach
метод на SQLConnection
это смотрит точно, в чем Вы нуждаетесь.
Я не протестировал это, но согласно документации это должно работать:
var connection : SQLConnection = new SQLConnection();
connection.open(firstDbFile);
connection.attach(secondDbFile, "otherDb");
var statement : SQLStatement = new SQLStatement();
statement.connection = connection;
statement.text = "INSERT INTO main.myTable SELECT * FROM otherDb.myTable";
statement.execute();
Могут быть ошибки в том коде snipplet, я не работал очень с SQL AIR API в последнее время. Заметьте что таблицы базы данных, открытой с open
доступное использование main.tableName
, любой приложенной базе данных можно дать любое имя вообще (otherDb
в примере выше).
этот код может быть работой, это - запись меня:
package lib.tools
import flash.utils.ByteArray;
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.data.SQLResult;
import flash.data.SQLMode;
import flash.events.SQLErrorEvent;
import flash.events.SQLEvent;
import flash.filesystem.File;
import mx.core.UIComponent;
import flash.data.SQLConnection;
public class getConn {
public var Conn:SQLConnection;
public function getConn(database:Array) {
Conn = new SQLConnection();
var Key:ByteArray = new ByteArray();
Key.writeUTFBytes("Some16ByteString");
Conn.addEventListener(SQLErrorEvent.ERROR, createError);
var dbFile:File = File.applicationDirectory.resolvePath(database[0]);
Conn.open(dbFile);
if(database.length > 1) {
for(var i:Number = 1; i < database.length; i++) {
var DBname:String = database[i];
Conn.attach(DBname.split("\.")[0], File.applicationDirectory.resolvePath(DBname));
}
}
Conn.open(dbFile, SQLMode.CREATE, false, 1024, Key);
}
private function createError(event:SQLErrorEvent):void {
trace("Error code:", event.error.details);
trace("Details:", event.error.message);
}
public function Rs(sql:Array):Object {
var stmt:SQLStatement = new SQLStatement();
Conn.begin();
stmt.sqlConnection = Conn;
try {
for(var i:String in sql) {
stmt.text = sql[i];
stmt.execute();
}
Conn.commit();
} catch(error:SQLErrorEvent) {
createError(error);
Conn.rollback();
};
var result:Object =stmt.getResult();
return result;
}
}
Возможно открыть несколько баз данных сразу в Sqlite, но сомнительно, может ли быть сделан при работе от Flex/AIR. В клиенте командной строки Вы работаете ATTACH DATABASE path/to/other.db AS otherDb
и затем можно обратиться к таблицам в той базе данных как otherDb.tableName
так же, как в MySQL или SQL Server.
Таблицы в приложенной базе данных могут быть отнесены в использование синтаксиса database-name.table-name.