التشغيل السريع: استخدام لغة Go للاتصال والاستعلام عن البيانات في قاعدة بيانات Azure ل PostgreSQL - خادم مرن
ينطبق على: قاعدة بيانات Azure ل PostgreSQL - خادم مرن
يوضح التشغيل السريع كيفية الاتصال بقاعدة بيانات Azure لـ PostgreSQL باستخدام لغة Go (golang). توضح طريقة استخدام عبارات SQL الاستعلام عن البيانات وإدراجها وتحديثها وحذفها في قاعدة البيانات. يفترض هذا المقال أنك على دراية بالتطوير باستخدام Go، ولكنك جديد في التعامل مع قاعدة بيانات Azure لـ PostgreSQL.
المتطلبات الأساسية
يستخدم هذا التشغيل السريع الموارد التي تم إنشاؤها في إنشاء مثيل لقاعدة بيانات Azure ل PostgreSQL - الخادم المرن كنقطة بداية.
هام
نوصي باستخدام خادم مع تمكين الوصول العام (عناوين IP المسموح بها) لبدء التشغيل السريع هذا. قد يتضمن استخدام خادم مع وصول خاص (تكامل VNet) ممكن لإكمال هذا التشغيل السريع خطوات إضافية غير مشمولة.
تأكد من إضافة عنوان IP الذي تتصل منه إلى قواعد جدار الحماية للخادم باستخدام مدخل Microsoft Azure أو Azure CLI.
تثبيت Go وموصل pq
تثبيت Go وبرنامج التشغيل Pure Go Postgres (pq) على جهازك. اعتمادًا على نظامك الأساسي، اتبع الخطوات المناسبة:
قم بتنزيل وتثبيت Go لـ Microsoft Windows وفقًا لإرشادات التثبيت.
قم بتشغيل موجه الأوامر من قائمة البدء.
قم بعمل مجلد لمشروعك مثل
mkdir %USERPROFILE%\go\src\postgresqlgo
.قم بتغيير الدليل إلى مجلد المشروع، مثل
cd %USERPROFILE%\go\src\postgresqlgo
.قم بتعيين متغير البيئة لـ GOPATH للإشارة إلى دليل التعليمة البرمجية المصدر.
set GOPATH=%USERPROFILE%\go
.قم بتشغيل go mod init لإنشاء وحدة نمطية في الدليل الحالي. على سبيل المثال:
go mod init postgresqlgo
.<module_path>
المعلمة هي عموما موقع في مستودع GitHub - مثلgithub.com/<your_github_account_name>/<directory>
.- عند إنشاء تطبيق سطر أوامر كاختبار ولن تنشر التطبيق،
<module_path>
لا يحتاج إلى الإشارة إلى موقع فعلي. على سبيل المثال،postgresqlgo
قم بتثبيت برنامج التشغيل Pure Go Postgres (pq) عن طريق تشغيل الأمر
go get github.com/lib/pq
.باختصار، قم بتثبيت Go، ثم قم بتشغيل هذه الأوامر في موجه الأوامر:
mkdir %USERPROFILE%\go\src\postgresqlgo cd %USERPROFILE%\go\src\postgresqlgo set GOPATH=%USERPROFILE%\go go mod init postgresqlgo go get github.com/lib/pq
الحصول على معلومات الاتصال
الحصول على معلومات الاتصال المطلوبة للاتصال بقاعدة بيانات Azure لـ PostgreSQL. أنت بحاجة إلى اسم الخادم المؤهل بالكامل وبيانات اعتماد تسجيل الدخول.
- سجّل الدخول إلى مدخل Azure.
- من القائمة اليسرى في مدخل Azure، انقر فوق كافة الموارد،ثم ابحث عن الخادم الذي أنشأته (مثل mydemoserver).
- حدد اسم الخادم.
- من لوحة نظرة عامة على الخادم، دوّن ملاحظة عن اسم الخادم واسم تسجيل دخول مسؤول الخادم. إذا نسيت كلمة المرور، يمكنك أيضًا إعادة تعيين كلمة المرور من هذه اللوحة.
بناء وتشغيل كود Go
- لكتابة التعليمة البرمجية لـ Golang، يمكنك استخدام محرر نصوص بسيط، مثل Notepad في Microsoft Windows أو vi أو Nano في Ubuntu أو TextEdit في macOS. إذا كنت تفضل بيئة تطوير تفاعلية أكثر ثراءً، فجرّب GoLand بواسطة Jetbrains أو Visual Studio Code من Microsoft أوAtom.
- ألصق تعليمة Golang البرمجية من الأقسام أدناه في ملفات نصية، ثم احفظها في مجلد المشروع الخاص بك بامتداد الملف *.go (مثل مسار Windows
%USERPROFILE%\go\src\postgresqlgo\createtable.go
أو مسار Linux~/go/src/postgresqlgo/createtable.go
). - حدد موقع الثوابت
HOST
وDATABASE
وUSER
وPASSWORD
في التعليمات البرمجية، واستبدل نماذج القيم بقيمك الخاصة. يتم إنشاء قاعدة بيانات باسم postgres عند إنشاء قاعدة بيانات Azure لمثيل خادم PostgreSQL. يمكنك استخدام قاعدة البيانات هذه أو قاعدة بيانات أخرى قمت بإنشائها. - قم بتشغيل موجه الأوامر أو Bash shell. قم بتغيير الدليل إلى مجلد المشروع الخاص بك. على سبيل المثال، في Windows
cd %USERPROFILE%\go\src\postgresqlgo\
. على Linuxcd ~/go/src/postgresqlgo/
. تقدم بعض بيئات IDE المذكورة إمكانيات التصحيح ووقت التشغيل دون الحاجة إلى أوامر shell. - قم بتشغيل الكود عن طريق كتابة الأمر
go run createtable.go
لترجمة التطبيق وتشغيله. - بدلاً من ذلك، لإنشاء التعليمات البرمجية في تطبيق أصلي،
go build createtable.go
، قم بتشغيلcreatetable.exe
لتشغيل التطبيق.
توصيل جدول وإنشائه
استخدم التعليمات البرمجية التالية لتوصيل وإنشاء جدول باستخدام عبارة CREATE TABLE SQL، متبوعة بعبارات INSERT INTO SQL لإضافة صفوف إلى الجدول.
تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم PostgreSQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.
يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات PostgreSQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. التعليمة البرمجية تستدعي طريقة Exec() عدة مرات لتشغيل عدة أوامر SQL. في كل مرة، يتحقق أسلوب checkError() مخصص من حدوث خطأ والذعر للخروج إذا حدث خطأ.
استبدل المعلمات HOST
وDATABASE
وUSER
وPASSWORD
بالقيم الخاصة بك.
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
// Initialize connection constants.
HOST = "mydemoserver.postgres.database.azure.com"
DATABASE = "postgres"
USER = "mylogin"
PASSWORD = "<server_admin_password>"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)
// Initialize connection object.
db, err := sql.Open("postgres", connectionString)
checkError(err)
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database")
// Drop previous table of same name if one exists.
_, err = db.Exec("DROP TABLE IF EXISTS inventory;")
checkError(err)
fmt.Println("Finished dropping table (if existed)")
// Create table.
_, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
checkError(err)
fmt.Println("Finished creating table")
// Insert some data into table.
sql_statement := "INSERT INTO inventory (name, quantity) VALUES ($1, $2);"
_, err = db.Exec(sql_statement, "banana", 150)
checkError(err)
_, err = db.Exec(sql_statement, "orange", 154)
checkError(err)
_, err = db.Exec(sql_statement, "apple", 100)
checkError(err)
fmt.Println("Inserted 3 rows of data")
}
اقرأ البيانات
استخدم التعليمات البرمجية التالية للاتصال وقراءة البيانات باستخدام حدد عبارة SQL.
تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم PostgreSQL، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.
يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات PostgreSQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. يتم تشغيل استعلام التحديد عن طريق استدعاء db.Query()، ويتم الاحتفاظ بالصفوف الناتجة في متغير من نوع الصفوف. تقرأ التعليمات البرمجية قيم بيانات العمود في الصف الحالي باستخدام rows.Scan() والحلقات عبر الصفوف باستخدام rows.Next() المتكرر حتى لا توجد صفوف أخرى. تتم طباعة قيم عمود كل صف إلى وحدة التحكم. في كل مرة يتم استخدام أسلوب checkError() مخصص للتحقق مما إذا حدث خطأ والذعر للخروج إذا حدث خطأ.
استبدل المعلمات HOST
وDATABASE
وUSER
وPASSWORD
بالقيم الخاصة بك.
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
// Initialize connection constants.
HOST = "mydemoserver.postgres.database.azure.com"
DATABASE = "postgres"
USER = "mylogin"
PASSWORD = "<server_admin_password>"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)
// Initialize connection object.
db, err := sql.Open("postgres", connectionString)
checkError(err)
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database")
// Read rows from table.
var id int
var name string
var quantity int
sql_statement := "SELECT * from inventory;"
rows, err := db.Query(sql_statement)
checkError(err)
defer rows.Close()
for rows.Next() {
switch err := rows.Scan(&id, &name, &quantity); err {
case sql.ErrNoRows:
fmt.Println("No rows were returned")
case nil:
fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
default:
checkError(err)
}
}
}
تحديث البيانات
استخدم التعليمات البرمجية التالية للاتصال وقراءة البيانات باستخدام تحديث عبارة SQL.
تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم Postgres، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.
يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات PostgreSQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. تقوم التعليمات البرمجية باستدعاء الأسلوب Exec() لتشغيل عبارة SQL تحديث الجدول. يُستخدم أسلوب checkError() مخصص للتحقق مما إذا حدث خطأ ثم الذعر للإنهاء إذا حدث خطأ.
استبدل المعلمات HOST
وDATABASE
وUSER
وPASSWORD
بالقيم الخاصة بك.
package main
import (
"database/sql"
_ "github.com/lib/pq"
"fmt"
)
const (
// Initialize connection constants.
HOST = "mydemoserver.postgres.database.azure.com"
DATABASE = "postgres"
USER = "mylogin"
PASSWORD = "<server_admin_password>"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString string =
fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)
// Initialize connection object.
db, err := sql.Open("postgres", connectionString)
checkError(err)
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database")
// Modify some data in table.
sql_statement := "UPDATE inventory SET quantity = $2 WHERE name = $1;"
_, err = db.Exec(sql_statement, "banana", 200)
checkError(err)
fmt.Println("Updated 1 row of data")
}
حذف البيانات
استخدم التعليمات البرمجية التالية للاتصال وحذف البيانات باستخدامحذف عبارة SQL.
تستورد التعليمة البرمجية ثلاث حزم: sql package، وgo sql driver for mysql كمحرك للاتصال بخادم Postgres، وحزمة fmt للمدخلات والمخرجات المطبوعة على سطر الأوامر.
يستدعي الرمز الأسلوب sql.Open() للاتصال بقاعدة بيانات PostgreSQL، ويتحقق من الاتصال باستخدام الطريقة db.Ping(). يُستخدم مقبض قاعدة البيانات طوال الوقت، مع الاحتفاظ بمجموعة الاتصال لخادم قاعدة البيانات. تقوم التعليمات البرمجية باستدعاء الأسلوب Exec() لتشغيل عبارة SQL والتي تحذف صفًّا من الجدول. يُستخدم أسلوب checkError() مخصص للتحقق مما إذا حدث خطأ ثم الذعر للإنهاء إذا حدث خطأ.
استبدل المعلمات HOST
وDATABASE
وUSER
وPASSWORD
بالقيم الخاصة بك.
package main
import (
"database/sql"
_ "github.com/lib/pq"
"fmt"
)
const (
// Initialize connection constants.
HOST = "mydemoserver.postgres.database.azure.com"
DATABASE = "postgres"
USER = "mylogin"
PASSWORD = "<server_admin_password>"
)
func checkError(err error) {
if err != nil {
panic(err)
}
}
func main() {
// Initialize connection string.
var connectionString string =
fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)
// Initialize connection object.
db, err := sql.Open("postgres", connectionString)
checkError(err)
err = db.Ping()
checkError(err)
fmt.Println("Successfully created connection to database")
// Delete some data from table.
sql_statement := "DELETE FROM inventory WHERE name = $1;"
_, err = db.Exec(sql_statement, "orange")
checkError(err)
fmt.Println("Deleted 1 row of data")
}
تنظيف الموارد
لتنظيف جميع الموارد المستخدمة في أثناء هذا التشغيل السريع حذف مجموعة الموارد باستخدام الأمر التالي:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes
المحتوى ذو الصلة
- إدارة قاعدة بيانات Azure ل PostgreSQL - خادم مرن.
- التشغيل السريع: استخدم Python للاتصال والاستعلام عن البيانات من مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن.
- التشغيل السريع: استخدم Java للاتصال والاستعلام عن البيانات من مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن.
- التشغيل السريع: استخدم .NET (C#) للاتصال والاستعلام عن البيانات من مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن.
- التشغيل السريع: استخدم PHP للاتصال والاستعلام عن البيانات من مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن.
- التشغيل السريع: استخدم Azure CLI للاتصال والاستعلام عن البيانات من مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن.
- التشغيل السريع: استيراد البيانات من قاعدة بيانات Azure ل PostgreSQL - خادم مرن في Power BI.