簡體   English   中英

為 postgres 運行多個查詢(SELECT * from emp; Select * from adm;)並在兩個不同的結構中獲得結果 IN GO(GOLANG)

[英]Run multiple queries(SELECT * from emp; Select * from adm;) for postgres and get result in a two different struct IN GO(GOLANG)

我正在使用 Go 1.13 Postgres 11 和 GraphQL

我正在嘗試運行三個不同的查詢: 1. 在某些條件為真時獲取少數員工的詳細信息。 2. 獲取所有員工的所有詳細信息。 3. 在匹配 Empid 時獲取員工的所有詳細信息。

當我運行我的代碼時,它編譯成功

但是當我為(2和3)調用API時,它說無法獲取。 API for 1 運行成功。

在瀏覽解決方案並嘗試查找錯誤發生的位置時,它會在 rows.Scan() function 處收斂。

當我評論 rows.Scan() 行時,它在不提供數據的情況下運行,但在取消注釋后運行時

顯示錯誤:獲取失敗。

所以錯誤在於 rows.Scan()

也許我們在一個項目中不能有多個 rows.Scan()。 考慮到這一點,我創建了一個 function,它接受一個查詢語句並返回一個接口。

但這也沒有奏效。

    connStr := fmt.Sprintf("port=%d host=%s user=%s password=%s dbname=%s sslmode=disable", hostport, hostname, username, password, databaseName)
    db, err := sql.Open("postgres", connStr)

    if err != nil {
        fmt.Println(`Could not connect to db`)
        panic(err)
    }
    defer db.Close()

    rows, err := db.Query(query)
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    for rows.Next() {
        row := models.Universal{}
        if num == 1 {
            if err := rows.Scan(&row.AdhaarNo, &row.PersonalMobile, &row.Branch, &row.EmpID, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.PFNo, &row.BloodGroup, &row.PAN, &row.PersonalEmail, &row.FatherName, &row.EmergencyNo, &row.BankAcNo, &row.EmpBank, &row.IFSC, &row.Designation, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        } else if num == 2 {
            if err := rows.Scan(&row.AdhaarNo, &row.PersonalMobile, &row.Branch, &row.EmpID, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.ESINo, &row.PAN, &row.VisaNo, &row.VisaExpiry, &row.IntegreationRef, &row.OrgID, &row.DeptID, &row.SectionID, &row.JobTypeID, &row.GradeID, &row.DesignationID, &row.CustomGroup1ID, &row.CustomGroup2ID, &row.CustomGroup3ID, &row.Card1, &row.Card2, &row.ScheduleGroupID, &row.StartShift, &row.PersonalEmail, &row.WeakOffGropuID, &row.LeaveGroup, &row.Field1, &row.PFNo, &row.BloodGroup, &row.SerialNo, &row.PassportNo, &row.PassportExpiry, &row.Dept, &row.JobType, &row.Level, &row.CostCenter, &row.FatherName, &row.EmergencyNo, &row.ConfirmationPeriod, &row.PFDate, &row.CTC, &row.FBP, &row.VarPay, &row.AdminBank, &row.EmpBank, &row.IFSC, &row.PayMode, &row.RepManager, &row.RepManEmail, &row.MaritalStatus, &row.SalaryTemp, &row.IsRepMan, &row.SpouseName, &row.Relation, &row.IsMetro, &row.HasESS, &row.HasPF, &row.PFUAN, &row.IsEPFEntitled, &row.HasESI, &row.IsPFRestricted, &row.BankAcNo, &row.Designation, &row.DeptCode, &row.Role, &row.JobTitle, &row.CustomField, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        } else {
            if err := rows.Scan(&row.AdhaarNo, &row.Gender, &row.Branch, &row.EmpName, &row.DOB, &row.DOJ, &row.Gender, &row.LocAdd1, &row.LocAdd2, &row.LocCity, &row.LocState, &row.LocCountry, &row.PerAdd1, &row.PerAdd2, &row.PerCity, &row.PerState, &row.PerCountry, &row.OfficeMail, &row.OfficeMobile, &row.LocPIN, &row.PerPIN, &row.MotherName, &row.ESINo, &row.PAN, &row.VisaNo, &row.VisaExpiry, &row.IntegreationRef, &row.OrgID, &row.DeptID, &row.SectionID, &row.JobTypeID, &row.GradeID, &row.DesignationID, &row.CustomGroup1ID, &row.CustomGroup2ID, &row.CustomGroup3ID, &row.Card1, &row.Card2, &row.ScheduleGroupID, &row.StartShift, &row.PersonalEmail, &row.WeakOffGropuID, &row.LeaveGroup, &row.Field1, &row.PFNo, &row.BloodGroup, &row.SerialNo, &row.PassportNo, &row.PassportExpiry, &row.Dept, &row.JobType, &row.Level, &row.CostCenter, &row.FatherName, &row.EmergencyNo, &row.ConfirmationPeriod, &row.PFDate, &row.CTC, &row.FBP, &row.VarPay, &row.AdminBank, &row.EmpBank, &row.IFSC, &row.PayMode, &row.RepManager, &row.RepManEmail, &row.MaritalStatus, &row.SalaryTemp, &row.IsRepMan, &row.SpouseName, &row.Relation, &row.IsMetro, &row.HasESS, &row.HasPF, &row.PFUAN, &row.IsEPFEntitled, &row.HasESI, &row.IsPFRestricted, &row.BankAcNo, &row.Designation, &row.DeptCode, &row.Role, &row.JobTitle, &row.CustomField, &row.OnboardingStatus); err != nil {
                log.Fatal(err)
            }
            models.AllUniversal = append(models.AllUniversal, row)
        }
    }

    return models.AllUniversal
}

由於我用來從數據庫中獲取記錄的查詢,我遇到了“無法獲取”錯誤。

由於很少有列中沒有存儲任何值,因此它們會導致錯誤。 然后我使用“案例”技術來解決這些錯誤。

雖然相同的查詢在 pgadmin 查詢控制台中工作。

該案例是必需的,因為我在中間使用 graphql 而 graphql 無法處理那些空字段,所以如果字段值為 Z37A6259CC0C1DAE29BDA7866489DFF0.

在所有這些事情之前,我將多個查詢傳遞給單個用戶定義的 function,但后來我為返回單行和多行的查詢做了不同的 function。

這件事有效並解決了所有錯誤。

謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM