Come caricare un'immagine per SQL Server in R
Domanda
Sto creando alcuni grafici che voglio aggiornare in una tabella del database. La procedura che sto seguendo è:
- creare i grafici come file PNG / jpeg.
- Leggi il file come un vettore binario
- SQLUpdate
Il mio codice per i punti 2 e 3:
pngfile <- file(<filename>, "rb")
N <- 1e6
repeat{
pngfilecontents <- readBin(pngfile, what="raw", n=N)
if(length(pngfilecontents) == N) N <- 5 * N else break
}
close(pngfile)
C'è un tavolo df_DemandPatternMaster nel database con DemandPatternID chiave primaria, con record appropriato in atto con valore NULL nel campo pngFile.
update.query <- "update df_DemandPatternMaster set "
update.query <- paste( update.query, " pngFile = '", serialize(pngfilecontents, NULL) , "' where DemandPatternID = ", , sep="")
d <- sqlQuery(connection, update.query)
finisco per inserire solo un byte di dati. Il motivo sembra è che pasta vede il vettore serializzato e crea un vettore con il testo del prefisso e suffisso. Ho anche provato passando direttamente l'handle di file PNG
pngfile <- file(<filename>, "rb")
update.query <- paste( update.query, " pngFile = '", pngfile, "' where DemandPatternID = ", , sep="")
Questa inoltre non riesce.
Si prega di avvisare.
Soluzione
Forse, se si comprime il vettore pngfilecontents in una singola stringa. Qualcosa di simile:
update.query <- "update df_DemandPatternMaster set "
update.query <- paste( update.query, " pngFile = '", paste(pngfilecontents, collapse="") , "' where DemandPatternID = ", sep="")
Altri suggerimenti
Non ho provato questo con un database, ma ho avuto alcuni problemi di recente durante la serializzazione a / da un file di testo. Ecco una domanda ho chiesto che potrebbero essere collegati . Hai provato a usare l'ascii = interruttore T con serialize? Poi provare con e senza rawToChar.
Non ho un ambiente facile testare il tuo codice, ma sono interessato a ciò che si arriva con. Sto lavorando su un codice dove mi saranno eventualmente serializzazione di oggetti e la loro messa in un DB. Io non sono solo a quel punto ancora.