服务器与数据库连接与操作【Unity网络通信(二)】

1.服务器创建数据库

虽然XShell也是可以的,但是推荐新手用宝塔面板,简单就可以操作成功了:

如果没有安装就先安装,我这里安装的是8.0版本

同时要记得把防火墙的端口打开,否则外部连接会失败:

如果还是连接失败,可以把服务器中也把防火墙打开端口(两边的好像不太一样)

2.服务器与数据库的连接和操作

1.mypysql库

一种方法是mypysql库,就是直接用SQL语句操作,就需要按情况sql语句写了一遍

贴一下插入和查询的代码:

# 插入数据
import pymysql
user='root'
password="XXXXXXX"#数据库的密码
host="localhost"
db_name="user"
port=3306
charset='utf8mb4'

insert_sql="""
INSERT INTO users(id,name,age)
    VALUES (1,'张三',16),(2,'小明',20),(3,'小柳',18)

"""
#创建connect对象
connect=pymysql.connect(user=user,password=password,host=host,database=db_name,port=port,charset=charset)
#获取游标对象
cursor=connect.cursor()

try:
    #插入数据
    cursor.execute(insert_sql)
    connect.commit()
    print("插入成功")
    pass
except Exception as e:
    connect.rollback()
    print("插入失败",e)
cursor.close()
connect.close()
# 4)查询数据
import pymysql
import pprint
host="localhost"
username="root"
password="XXXXXXX"#数据库的密码
db_name="user"
port=3306
charset='utf8mb4'

#创建connect对象
connect=pymysql.connect(user=username,password=password,host=host,database=db_name,port=port,charset=charset)
#获取游标对象
cursor=connect.cursor(pymysql.cursors.DictCursor)

cursor.execute("SELECT * FROM users")
result=cursor.fetchone()# 返回一行数据
print("fetchone")
pprint.pprint(result)
print(result['age'])#取某个键的值

cursor.execute("SELECT * FROM users")
result=cursor.fetchall()# 获取所有数据
print("fetchall")
pprint.pprint(result)

cursor.execute("SELECT * FROM users where name = 'wupeiqi' and id = 8")
result=cursor.fetchone()# 返回一行数据
print("select id fetchone")
pprint.pprint(result)

cursor.close()
connect.close()

2.sqlalchemy库

sqlalchemy库可以按类对象插入数据库,其实就是把mypysql进行了封装,操作简单很多,当然直接sql语句操作也是可以的。

建立数据库连接:按自己的数据库账户密码进行设置:

# 建立连接
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session

# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
s1     = "mysql+pymysql://"
server = "root:password@localhost:3306/user"               # localhost是本机地址
s2     = "?charset=utf8" # "?use_unicode=0&charset=utf8"
connectserver = s1 + server + s2
engine = create_engine(connectserver, encoding = 'utf-8', echo = False) #初始化连接
SessionFactory = sessionmaker(bind=engine)
session = scoped_session(SessionFactory)
# 法1 SQL语句 插入

inset_sql = """
INSERT INTO users(id,name,age)
    VALUES (1,'小小白',116),(2,'大大白',220),(3,'小小明',118)
"""
try:
    # 有多种形式的执行方法
    cursor = session.execute(inset_sql)
    
    # 这里可以通过:表示参数
    # cursor = session.execute('INSERT INTO users(name,age) VALUES(:value,:age)', params={"value": 'wupeiqi',"age":'18'})
    
    # 添加参数,注意字符串要再加上双引号
    # str ="小大白"
    # cursor = session.execute(f'INSERT INTO users(name,age) VALUES("{str}",{12})')
    print("插入成功")
except Exception as e:
    print(e)
    session.rollback()
    print("插入失败")

session.commit()
cursor.close()
session.close()
# 法1:SQL语句 查询
import pprint
import base64
cursor = session.execute("SELECT * FROM users where id = 1")
# 或者:
# conn = engine.raw_connection()
# cursor = conn.cursor()
# cursor.execute("SELECT * FROM users")

result = cursor.fetchone()# 获取所有数据
print("fetch one")
name = result['name']
pprint.pprint(name)

然后比较简单的方法,就是通过类对象直接进行数据插入,即ORM(Object Relational Mapping)方法

# ORM方法-存入一般数据
# ORM(Object Relational Mapping,对象关系映射)框架

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker

#创建对象的基类:
Base = declarative_base()

#定义User对象:
class User(Base):
    #表的名字:
    __tablename__ = 'users'

    #表的结构:属性名要与数据表中的相同!
    id = Column(Integer,primary_key=True)
    name = Column(String(20))
    age = Column(Integer)

#初始化数据库连接# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
engine = create_engine("mysql+pymysql://root:1212123@localhost:3306/user",encoding="utf-8",echo=False)

#创建session类型
DBSession = sessionmaker(bind=engine)

#创建session对象
session = DBSession()
#创建新的user对象
new_user1 = User(name='CCA',age=25)
new_user2 = User(name="LILIA",age=30)
new_user3 = User(name='JOHNA',age=22)

try:
    #添加单条数据
    session.add(new_user1)

    #添加到全部数据
    # session.add_all([new_user1,new_user2,new_user3])
    print("插入成功")
    pass
except Exception as e:
    session.rollback()
    print(e)
    print("插入失败")
    pass

#提交即保存到数据库
session.commit()

#关闭session
session.close()
# ORM方法-读取一般数据
# ORM(Object Relational Mapping,对象关系映射)框架

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker

#创建对象的基类:
Base = declarative_base()

#定义User对象:
class User(Base):
    #表的名字:
    __tablename__ = 'users'

    #表的结构:属性名要与数据表中的相同!
    id = Column(Integer,primary_key=True)
    name = Column(String(20))
    age = Column(Integer)

    def __repr__(self) -> str: # 返回一个具有可读性的字符串表示模型,可在调试和测试时使用
        return '<Role %r>'% self.name

#初始化数据库连接# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
engine = create_engine("mysql+pymysql://root:1212123@localhost:3306/user",encoding="utf-8",echo=False)

#创建session类型
DBSession = sessionmaker(bind=engine)

#创建session对象
session = DBSession()

#获取表中全部数据,返回list类型,每个元素是一个行(类似字典)
qua = session.query(User.id,User.name,User.age).all() 
print("全部数据:")
print(qua)

#条件查询,返回list类型
qua = session.query(User.age).filter(User.name=='大大白').all()
print("条件查询:")
print(qua[0])

#提交即保存到数据库
session.commit()

#关闭session
session.close()

猜你喜欢

转载自blog.csdn.net/cycler_725/article/details/127897693