Я хотел бы извлечь все Create Statements
в мои 50 MySQL
Базы данных через SHOW CREATE TABLE db.table
или SHOW CREATE TABLE db1.mytable
или SHOW CREATE TABLE db2.sometable
или SHOW CREATE TABLE db3.mytable1
. Таким образом, каждая из БД имеет несколько таблиц внутри db1(table,mytable...) db2(table1,sometable) and so on
Чтобы проиллюстрировать БД через примерный запрос:
SELECT *
FROM db.table1 m
LEFT JOIN db1.sometable o ON m.id = o.id
LEFT JOIN db2.sometables t ON p.id=t.id
LEFT JOIN db3.sometable s ON s.column='john'
library(RMySQL)
library(DBI)
con <- dbConnect(RMySQL::MySQL(),
username = "",
password = "",
host = "",
port = 3306,
dbname= mydbname)# when using dbs<-dbGetQuery(con ,"SHOW DATABASES") I have to ## dbname= mydbname## to get all DBs
Используя dbs<-dbGetQuery(con ,"SHOW DATABASES")
, я могу извлечь все 50 баз данных в dbConnection в качестве символьного вектора. Я хотел бы перебрать каждый DB в dbs
и применить SHOW CREATE TABLE
к каждой строке /db. Я полагаю, что я должен разбирать каждую строку /db в dbname= mydbname
и dbs<-dbGetQuery(con ,"SHOW CREATE TABLE")
. Но я просто не могу понять, как сделать петли
Я пробовал:
apply(dbs, 1, function(row) {
dbname <- row[]
for (i in 1:length(dbname)) {
create<-dbGetQuery(con,"SHOW CREATE TABLE") }
})
Но это не кажется правильным. Полагаю, я должен каким-то образом включить con
в цикл. В противном случае я получу:
Error in .local(drv, ...) : object 'dbname' not found
Итак, я попробовал:
apply(dbs, 1, function(row) {
dbname <- row[]
for (i in 1:length(dbname)) {
con <- dbConnect(RMySQL::MySQL(),
username = "",
password = "",
host = "",
port = 3306,
dbname= [i])
create<-dbGetQuery(con,"SHOW CREATE TABLE") }})
Я полагаю, что это близко к решению, но я что-то пропустил:
dbs<-dbGetQuery(con,"show databases")
library(foreach)
foreach(i = 1:(length(dbs))%dopar%{
query<-paste("SHOW CREATE TABLE",dbs[i])
creates<-dbGetQuery(con,query)
})