绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
TBase应用接入指南(下篇)
2020-03-12 17:16:51
版本号--V2.17
更新日期:2019-11-13 

5PHP程序开发

5.1、连接数据库

<?php     $host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";   //连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");      if (!$conn){    $error_msg=@pg_errormessage($conn);     echo "连接数据库出错,详情:".$error_msg."\n<BR>"; ;    exit;}else{    echo "连接数据库成功"."\n<BR>";      } //关闭连接pg_close($conn);?> 执行[root@VM_0_47_centos test]# curl http://127.0.0.1:8080/dbsta/test/conn.php连接数据库成功


5.2、创建数据表

<?php $host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";
//连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn){$error_msg=@pg_errormessage($conn); echo "连接数据库出错,详情:".$error_msg."\n"; ;exit;}else{echo "连接数据库成功"."\n"; }
//建立数据表$sql="create table public.tbase(id integer,nickname varchar(100)) distribute by shard(id) to group default_group;";$result = @pg_exec($conn,$sql) ;if (!$result){$error_msg=@pg_errormessage($conn); echo "创建数据表出错,详情:".$error_msg."\n"; ;exit;}else{echo "创建数据表成功"."\n"; }//关闭连接pg_close($conn);?>
执行
[root@VM_0_47_centos test]# curl http://127.0.0.1:8080/dbsta/test/createtable.php连接数据库成功创建数据表成功


5.3、插入数据

<?php $host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";
//连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn){$error_msg=@pg_errormessage($conn); echo "连接数据库出错,详情:".$error_msg."\n"; ;exit;}else{echo "连接数据库成功"."\n"; }
//插入数据$sql="insert into public.tbase values(1,'tbase'),(2,'pgxz');"; $result = @pg_exec($conn,$sql) ;if (!$result){$error_msg=@pg_errormessage($conn); echo "插入数据出错,详情:".$error_msg."\n";exit;}else{echo "插入数据成功"."\n"; }
//关闭连接pg_close($conn);
?>
执行[tbase@VM_0_47_centos test]$ curl http://127.0.0.1:8080/dbsta/test/insert.php连接数据库成功插入数据成功

5.4、查询数据
<?php $host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";
//连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn){$error_msg=@pg_errormessage($conn); echo "连接数据库出错,详情:".$error_msg."\n"; ;exit;}else{echo "连接数据库成功"."\n"; }
//查询数据 $sql="select id,nickname from public.tbase"; $result = @pg_exec($conn,$sql) ;if (!$result){$error_msg=@pg_errormessage($conn); echo "查询数据出错,详情:".$error_msg."\n";exit;}else{echo "插入数据成功"."\n"; }$record_num = pg_numrows($result); echo "返回记录数".$record_num."\n"; $rec=pg_fetch_all($result); for($i=0;$i<$record_num;$i++){echo "记录数#".strval($i+1)."\n";echo "id:".$rec[$i]["id"]."\n";echo "nickname:".$rec[$i]["nickname"]."\n\n";}//关闭连接pg_close($conn);?>
调用方法[root@VM_0_47_centos ~]# curl http://127.0.0.1:8080/dbsta/test/select.php连接数据库成功插入数据成功返回记录数2记录数#1id:1nickname:tbase
记录数#2id:2nickname:pgxz


5.5、流数据copy 入表

<?php
$host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";
//连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn){ $error_msg=@pg_errormessage($conn); echo "连接数据库出错,详情:".$error_msg."\n"; ;exit;}else{echo "连接数据库成功"."\n"; } $row=ARRAY("1,TBase","2,pgxz"); $flag=pg_copy_from($conn,"public.tbase",$row,",");
if (!$flag){ $error_msg=@pg_errormessage($conn); echo "copy出错,详情:".$error_msg."\n";}else{echo "copy成功"."\n"; }
//关闭连接pg_close($conn);
?>
调用方法curl http://127.0.0.1/dbsta/cron/php_copy_from.php连接数据库成功copy成功

5.6copy to导出数据到一个数组中
<?php
$host="172.16.0.29";$port="15432";$dbname="postgres";$user="tbase" ;$password="";
//连接数据库$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password"); if (!$conn){ $error_msg=@pg_errormessage($conn); echo "连接数据库出错,详情:".$error_msg."\n"; ;exit;}else{echo "连接数据库成功"."\n"; }
$row=pg_copy_to($conn,"public.tbase",","); if (!$row){ $error_msg=@pg_errormessage($conn); echo "copy出错,详情:".$error_msg."\n";}else{ print_r($row);} //关闭连接 pg_close($conn); ?>

调用方法curl http://127.0.0.1/dbsta/cron/php_copy_to.php 连接数据库成功Array( [0] => 1,TBase
[1] => 2,pgxz


6golang程序开发

6.1、连接数据库

package main
import ("fmt""time"
"github.com/jackc/pgx")
func main() {var error_msg string
//连接数据库 conn, err := db_connect()if err != nil { error_msg = "连接数据库失败,详情:" + err.Error() write_log("Error", error_msg)return }//程序运行结束时关闭连接defer conn.Close() write_log("Log", "连接数据库成功")
}
/*功能描述:写入日志处理
参数说明:log_level -- 日志级别,只能是是Error或Logerror_msg -- 日志内容
返回值说明:无*/
func write_log(log_level string, error_msg string) {//打印错误信息 fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("日志级别:", log_level) fmt.Println("详细信息:", error_msg)}
/*功能描述:连接数据库
参数说明:无
返回值说明:conn *pgx.Conn -- 连接信息err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {var config pgx.ConnConfig config.Host = "127.0.0.1" //数据库主机host或ip config.User = "tbase" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "postgres" //连接数据库名 config.Port = 15432 //端口号 conn, err = pgx.Connect(config)return conn, err}
[root@VM_0_29_centos tbase]# go run conn.go访问时间:2018-04-03 20:40:28日志级别:Log详细信息:连接数据库成功
编译后运行[root@VM_0_29_centos tbase]# go build conn.go[root@VM_0_29_centos tbase]# ./conn 访问时间:2018-04-03 20:40:48日志级别:Log详细信息:连接数据库成功

6.2、创建数据表
package main
import ("fmt""time"
"github.com/jackc/pgx")
func main() {var error_msg stringvar sql string
//连接数据库 conn, err := db_connect()if err != nil { error_msg = "连接数据库失败,详情:" + err.Error() write_log("Error", error_msg)return }//程序运行结束时关闭连接defer conn.Close() write_log("Log", "连接数据库成功")
//建立数据表 sql = "create table public.tbase(id varchar(20),nickname varchar(100)) distribute by shard(id) to group default_group;" _, err = conn.Exec(sql)if err != nil { error_msg = "创建数据表失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "创建数据表成功") }}
/*功能描述:写入日志处理
参数说明:log_level -- 日志级别,只能是是Error或Logerror_msg -- 日志内容
返回值说明:无*/
func write_log(log_level string, error_msg string) {//打印错误信息 fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("日志级别:", log_level) fmt.Println("详细信息:", error_msg)}
/*功能描述:连接数据库
参数说明:无
返回值说明:conn *pgx.Conn -- 连接信息err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {var config pgx.ConnConfig config.Host = "127.0.0.1" //数据库主机host或ip config.User = "tbase" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "postgres" //连接数据库名 config.Port = 15432 //端口号 conn, err = pgx.Connect(config)return conn, err}
[root@VM_0_29_centos tbase]# go run createtable.go访问时间:2018-04-03 20:50:24日志级别:Log详细信息:连接数据库成功访问时间:2018-04-03 20:50:24日志级别:Log详细信息:创建数据表成功


6.3、插入数据

package main
import ("fmt""strings""time"
"github.com/jackc/pgx")
func main() {var error_msg stringvar sql stringvar nickname string
//连接数据库 conn, err := db_connect()if err != nil { error_msg = "连接数据库失败,详情:" + err.Error() write_log("Error", error_msg)return }//程序运行结束时关闭连接defer conn.Close() write_log("Log", "连接数据库成功")
//插入数据 sql = "insert into public.tbase values('1','tbase'),('2','pgxz');" _, err = conn.Exec(sql)if err != nil { error_msg = "插入数据失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "插入数据成功") }
//绑定变量插入数据,不需要做防注入处理 sql = "insert into public.tbase values($1,$2),($1,$3);" _, err = conn.Exec(sql, "3", "postgresql", "postgres")if err != nil { error_msg = "插入数据失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "插入数据成功") }
//拼接sql语句插入数据,需要做防注入处理 nickname = "TBase is ' good!" sql = "insert into public.tbase values('1','" + sql_data_encode(nickname) + "')" _, err = conn.Exec(sql)if err != nil { error_msg = "插入数据失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "插入数据成功") }}
/*功能描述:sql查询拼接字符串编码
参数说明:str -- 要编码的字符串
返回值说明:返回编码过的字符串
*/
func sql_data_encode(str string) string {return strings.Replace(str, "'", "''", -1)}
/*功能描述:写入日志处理
参数说明:log_level -- 日志级别,只能是是Error或Logerror_msg -- 日志内容
返回值说明:无*/
func write_log(log_level string, error_msg string) {//打印错误信息 fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("日志级别:", log_level) fmt.Println("详细信息:", error_msg)}
/*功能描述:连接数据库
参数说明:无
返回值说明:conn *pgx.Conn -- 连接信息err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {var config pgx.ConnConfig config.Host = "127.0.0.1" //数据库主机host或ip config.User = "tbase" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "postgres" //连接数据库名 config.Port = 15432 //端口号 conn, err = pgx.Connect(config)return conn, err}
[root@VM_0_29_centos tbase]# go run insert.go访问时间:2018-04-03 21:05:51日志级别:Log详细信息:连接数据库成功访问时间:2018-04-03 21:05:51日志级别:Log详细信息:插入数据成功访问时间:2018-04-03 21:05:51日志级别:Log详细信息:插入数据成功访问时间:2018-04-03 21:05:51日志级别:Log详细信息:插入数据成功


6.4、查询数据

package main
import ("fmt""strings""time"
"github.com/jackc/pgx")
func main() {var error_msg stringvar sql string
//连接数据库 conn, err := db_connect()if err != nil { error_msg = "连接数据库失败,详情:" + err.Error() write_log("Error", error_msg)return }//程序运行结束时关闭连接defer conn.Close() write_log("Log", "连接数据库成功")
sql = "SELECT id,nickname FROM public.tbase LIMIT 2" rows, err := conn.Query(sql)if err != nil { error_msg = "查询数据失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "查询数据成功") }
var nickname stringvar id string
for rows.Next() { err = rows.Scan(&id, &nickname)if err != nil { error_msg = "执行查询失败,详情:" + err.Error() write_log("Error", error_msg)return } error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname) write_log("Log", error_msg) } rows.Close()
nickname = "tbase"
sql = "SELECT id,nickname FROM public.tbase WHERE nickname ='" + sql_data_encode(nickname) + "' " rows, err = conn.Query(sql)if err != nil { error_msg = "查询数据失败,详情:" + err.Error() write_log("Error", error_msg)return } else { write_log("Log", "查询数据成功") }defer rows.Close()
for rows.Next() { err = rows.Scan(&id, &nickname)if err != nil { error_msg = "执行查询失败,详情:" + err.Error() write_log("Error", error_msg)return } error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname) write_log("Log", error_msg) }}
/*功能描述:sql查询拼接字符串编码
参数说明:str -- 要编码的字符串
返回值说明:返回编码过的字符串
*/
func sql_data_encode(str string) string {return strings.Replace(str, "'", "''", -1)}
/*功能描述:写入日志处理
参数说明:log_level -- 日志级别,只能是是Error或Logerror_msg -- 日志内容
返回值说明:无*/
func write_log(log_level string, error_msg string) {//打印错误信息 fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("日志级别:", log_level) fmt.Println("详细信息:", error_msg)}
/*功能描述:连接数据库
参数说明:无
返回值说明:conn *pgx.Conn -- 连接信息err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {var config pgx.ConnConfig config.Host = "127.0.0.1" //数据库主机host或ip config.User = "tbase" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "postgres" //连接数据库名 config.Port = 15432 //端口号 conn, err = pgx.Connect(config)return conn, err}
[root@VM_0_29_centos tbase]# go run select.go访问时间:2018-04-09 10:35:50日志级别:Log详细信息:连接数据库成功访问时间:2018-04-09 10:35:50日志级别:Log详细信息:查询数据成功访问时间:2018-04-09 10:35:50日志级别:Log详细信息:id:2 nickname:tbase访问时间:2018-04-09 10:35:50日志级别:Log详细信息:id:3 nickname:postgresql访问时间:2018-04-09 10:35:50日志级别:Log详细信息:查询数据成功访问时间:2018-04-09 10:35:50日志级别:Log详细信息:id:1 nickname:tbase


6.5、流数据copy from入表 

package main
import ("fmt""math/rand""time"
"github.com/jackc/pgx")
func main() {var error_msg string
//连接数据库 conn, err := db_connect()if err != nil { error_msg = "连接数据库失败,详情:" + err.Error() write_log("Error", error_msg)return }//程序运行结束时关闭连接defer conn.Close() write_log("Log", "连接数据库成功")
//构造5000行数据 inputRows := [][]interface{}{}var id stringvar nickname stringfor i := 0; i < 5000; i++ { id = fmt.Sprintf("%d", rand.Intn(10000)) nickname = fmt.Sprintf("%d", rand.Intn(10000)) inputRows = append(inputRows, []interface{}{id, nickname}) } copyCount, err := conn.CopyFrom(pgx.Identifier{"tbase"}, []string{"id", "nickname"}, pgx.CopyFromRows(inputRows))if err != nil { error_msg = "执行copyFrom失败,详情:" + err.Error() write_log("Error", error_msg)return }if copyCount != len(inputRows) { error_msg = fmt.Sprintf("执行copyFrom失败,copy行数:%d 返回行数为:%d", len(inputRows), copyCount) write_log("Error", error_msg)return } else { error_msg = "Copy 记录成功" write_log("Log", error_msg) }
}
/*功能描述:写入日志处理
参数说明:log_level -- 日志级别,只能是是Error或Logerror_msg -- 日志内容
返回值说明:无*/
func write_log(log_level string, error_msg string) {//打印错误信息 fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05")) fmt.Println("日志级别:", log_level) fmt.Println("详细信息:", error_msg)}
/*功能描述:连接数据库
参数说明:无
返回值说明:conn *pgx.Conn -- 连接信息err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {var config pgx.ConnConfig config.Host = "127.0.0.1" //数据库主机host或ip config.User = "tbase" //连接用户 config.Password = "pgsql" //用户密码 config.Database = "postgres" //连接数据库名 config.Port = 15432 //端口号 conn, err = pgx.Connect(config)return conn, err}
[root@VM_0_29_centos tbase]# go run copy_from.go访问时间:2018-04-09 10:36:40日志级别:Log详细信息:连接数据库成功访问时间:2018-04-09 10:36:40日志级别:Log详细信息:Copy 记录成功


6.6golang相关资源包

需要git的资源包
https://github.com/jackc/pgx
https://github.com/pkg/errors



分享好友

分享这个小栈给你的朋友们,一起进步吧。

PostgreSQL中文社区小栈
创建时间:2019-04-19 17:47:49
PostgreSQL中文社区是一个非盈利的民间组织,已经在中国成功举办过8届技术大会。目前成员都以志愿者身份加入,成立的目的在于构建PG数据库技术生态圈子(内核、用户、培训机构、厂商、服务商、软件开发商、高校形成“业务与利益双向驱动”的良性发展生态圈);帮助企业解决人才培养和企业商用数据库成本问题。社区会在各运营平台发布PG新信息和PG相关技术文章,推动PG技术在中国的发展。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • wangliyun
    栈主
  • digoal
    嘉宾
  • 飘絮絮絮丶
    嘉宾

小栈成员

查看更多
  • 栈栈
  • 喵呜
  • osdba
  • 一号管理员
戳我,来吐槽~