Как я могу скопировать Базу данных MySQL в рубине на направляющих?

Это абсолютно возможно. Вы получаете то, что я часто нахожу сложнее всего, получая информацию с другой платформы. Чтобы сделать эту работу, я бы немного выделил ее и для простоты использовал 2 листа (Лист1 с вашими известными данными и Лист2 для веб-данных).

Переберите свою таблицу из ~ 8000 предприятий. Мы можем определить это по количеству строк в UsedRange. Мы знаем, что ABN находится в столбце 2 (также известный как B), поэтому мы копируем его в переменную для передачи в функцию. Функция вернет «Тип сущности:» в столбец 3 (С) той же строки.

Sub LoopThroughBusinesses() 
    Dim i As Integer
    Dim ABN As String
    For i = 2 To Sheet1.UsedRange.Rows.Count
        ABN = Sheet1.Cells(i, 2)
        Sheet1.Cells(i, 3) = URL_Get_ABN_Query(ABN)
    Next i
End Sub

Измените подпрограмму, которую вы создали, на функцию, чтобы она возвращала тип сущности, к которому вы стремитесь. Функция сохранит данные в Sheet2, а затем вернет только те данные Entity, которые нам нужны.

Function URL_Get_ABN_Query(strSearch As String) As String   ' Change it from a Sub to a Function that returns the desired string
    ' strSearch = Range("a1") ' This is now passed as a parameter into the Function
    Dim entityRange As Range
    With Sheet2.QueryTables.Add( _
            Connection:="URL;http://www.abr.business.gov.au/SearchByABN.aspx?SearchText=" & strSearch & "&safe=active", _
            Destination:=Sheet2.Range("A1"))   ' Change this destination to Sheet2

        .BackgroundQuery = True
        .TablesOnlyFromHTML = True
        .Refresh BackgroundQuery:=False
        .SaveData = True
    End With

    ' Find the Range that has "Entity Type:"
    Set entityRange = Sheet2.UsedRange.Find("Entity type:")

    ' Then return the value of the cell to its' right
    URL_Get_ABN_Query = entityRange.Offset(0, 1).Value2

    ' Clear Sheet2 for the next run
    Sheet2.UsedRange.Delete

End Function
8
задан Tilendor 8 October 2008 в 16:57
поделиться

4 ответа

От любого контроллера можно определить следующий метод.

 def copy_template_database
        template_name = "customerdb1" # Database to copy from
        new_name = "temp" #database to create & copy to

        #connect to template database to copy.  Note that this will override any previous
        #connections for all Models that inherit from ActiveRecord::Base
        ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => template_name, :host => "olddev",
        :username => "root", :password => "password" })

        sql_connection = ActiveRecord::Base.connection 
        sql_connection.execute("CREATE DATABASE #{new_name} CHARACTER SET latin1 COLLATE latin1_general_ci")
        tables = sql_connection.select_all("Show Tables")
        #the results are an array of hashes, ie:
        # [{"table_from_customerdb1" => "customers"},{"table_from_customerdb1" => "employees},...]
        table_names = Array.new
        tables.each { |hash| hash.each_value { |name| table_names << name }}

        table_names.each { |name| 
            sql_connection.execute("CREATE TABLE #{new_name}.#{name} LIKE #{template_name}.#{name}")
            sql_connection.execute("INSERT INTO #{new_name}.#{name} SELECT * FROM #{template_name}.#{name}")
        }
        #This statement is optional.  It connects ActiveRecord to the new database
        ActiveRecord::Base.establish_connection({:adapter => "mysql", :database => new_name, :host => "olddev",
        :username => "root", :password => "password" })
    end

Обратите внимание, что я не знаю наверняка, если это сохранит внешнюю ключевую целостность. Я думаю, что это во многом зависит от того, как шаблон Database создается.

7
ответ дан 5 December 2019 в 09:26
поделиться

Я не уверен, что Вы имеете в виду, но можно использовать функциональность командной строки рубина, чтобы вывести шаблонную базу данных, создать новую базу данных и повторно импортировать ее с помощью mysqldump программы:

> mysqldump -uroot -proot templateDB > dump.sql
> mysql -uroot -proot --execute="CREATE DATABASE newDB"
> mysql -uroot -proot newDB < dump.sql

Вот хорошее описание вызова параметров командной строки от Ruby.

10
ответ дан 5 December 2019 в 09:26
поделиться

Вы могли поместить свой шаблонный код создания схемы в сценарий, который содержит все необходимые операторы создания таблицы/индекса/представления/процедуры, назовите его "template_schema.sql" или безотносительно и затем просто запустите скрипт на базе данных по Вашему выбору (от Ruby, если это - то, что Вы, после) и Вы сделаны.

Лучший подход должен, вероятно, иметь каждый объект базы данных в отдельном файле при управлении исходным кодом (чтобы помочь отследить изменения на отдельных объектах) и затем объединить их в единственный файл как часть развертывания.

0
ответ дан 5 December 2019 в 09:26
поделиться

Используя yaml_db

Вам необходимо установить плагин, выгрузить любую базу данных rails (включая mysql) в файл data.yml с помощью задачи rake, изменить строку подключения, чтобы она указывала на новую базу данных а затем, наконец, загрузите data.yml в любую новую базу данных (включая mysql), используя другую задачу rake. Очень просто.

1
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

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