我正在尋求幫助的方式,我可以通過Ironpython腳本將數據導入到數據庫。我如何導入MySQL數據與Ironpython
目前我的腳本如下,先運行此腳本:
import clr;
import System;
clr.AddReference("TCAdmin.SDK");
from TCAdmin.SDK.Misc import Random;
from System import String;
ThisService.Variables["MySQLUser"] = String.Format("exile_{0}", ThisService.ServiceId);
ThisService.Variables["MySQLPassword"] = Random.RandomString(10,True,True);
ThisService.Save();
那麼這個腳本運行後:
import clr;
import System;
clr.AddReference("TCAdmin.DatabaseProviders.MySql");
clr.AddReference("TCAdmin.SDK");
from TCAdmin.DatabaseProviders.MySql import MySqlManager;
from System import String;
mysql_server="localhost";
mysql_root="root";
mysql_password="Password";
with MySqlManager() as mysql:
escapeduser=mysql.PrepareSqlValue(ThisService.Variables["MySQLUser"]);
escapedpass=mysql.PrepareSqlValue(ThisService.Variables["MySQLPassword"]);
mysql.Connect(String.Format("Data Source={0};User Id={1};Password={2};Pooling=False;", mysql_server, mysql_root, mysql_password));
mysql.ExecuteNonQuery(String.Format("DROP DATABASE IF EXISTS {0};", escapeduser));
if mysql.Execute(String.Format("SELECT COUNT(*) as count FROM mysql.user WHERE user='{0}' AND host='localhost';", escapeduser)).Rows[0].Item[0] == 1 :
mysql.ExecuteNonQuery(String.Format("DROP USER {0}@localhost;", escapeduser));
mysql.ExecuteNonQuery(String.Format("CREATE DATABASE {0};", escapeduser));
mysql.ExecuteNonQuery(String.Format("GRANT ALL PRIVILEGES ON {0}.* TO '{0}'@'localhost' IDENTIFIED BY '{1}';", escapeduser, escapedpass));
mysql.ExecuteNonQuery(String.Format("USE '{0}';", escapeduser));
mysql.ExecuteNonQuery(String.Format("""CREATE TABLE IF NOT EXISTS `account` (
`uid` varchar(32) NOT NULL,
`clan_id` int(11) UNSIGNED DEFAULT NULL,
`name` varchar(64) NOT NULL,
`money` double NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`kills` int(11) UNSIGNED NOT NULL DEFAULT '0',
`deaths` int(11) UNSIGNED NOT NULL DEFAULT '0',
`first_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_disconnect_at` datetime DEFAULT NULL,
`total_connections` int(11) UNSIGNED NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;""", escapeduser));
當我運行該腳本,我得到的錯誤:
你的SQL語法有錯誤;請檢查與您的MySQL服務器版本對應的手冊,以獲得在第1行''exile_2''附近使用的正確語法。
TCAdmin.SDK.Database.DatabaseException:您在SQL語法中有錯誤;檢查與你的MySQL服務器版本相對應的手冊,在第1行的''exile_2''附近使用正確的語法--->你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行「exile_2」附近使用正確的語法---內部異常堆棧跟蹤結束---在Microsoft.Scripting.Interpreter.ThrowInstruction.Run(InterpretedFrame frame )at Microsoft.Scripting.Interpreter.Interpreter.RunInstructions(InterpretedFrame frame)at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)at Microsoft.Scripting.Interpreter.LightLambda.Run2 [T0,T1,TRet](T0 arg0,在IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope作用域)上的Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope作用域)在TCAdmin.SDK.Scripting.Engines上的T1 arg1)。 TCAdmin.GameHost處的TCAdmin.SDK.Scripting.ScriptEngineManager.Execute()上的IronPythonEngine.Execute(憑據憑據)TCAdmin.GameHosting.SDK.Objects.GameScript.ExecuteEventScripts(ScriptEngineManager scriptEngineManager,ServiceEvent eventScript,ObjectList腳本) (TCAdmin.GameHosting.Automation.AutomationProcesses.Start()at TCAdmin.TaskScheduler.ModuleApi.StepBase.Start(Object arguments)