分享

python+mysql

 AI量化实验室 2023-10-12 发布于北京

客观讲,一直在忽略传统的关系数据库。

因为一直觉得它陈旧,刻板。比较偏爱no sel在于不用schema,可以存各种类型。

当然存在即合理,更何况这种主流的存在着。

sql因为严谨,那各个关系数据库之间同步,查询是比较一致的。另外现在有一些人工智能问答的研究方向,就是把自然语言seq2seq翻译成sql,然后查询关系数据库。

关系数据库是sql查询驱动,支持事务,还有就是跨表关联,nosql这几个方面当然都比较弱。

我的python版本是3.5,anaconda也安装不了MySQLdb,只能下载编译包。

这里可以下载到,各种win下已编译好的python包。

http://www.lfd./~gohlke/pythonlibs/

然后本地pip install mysqlclient-1.3.12-cp35-cp35m-win_amd64

import MySQLdb

class MysqlMgr(object):
def __init__(self):
pass

   def open(self):
# 打开数据库连接
       self.db = MySQLdb.connect("ip","usr","pwd","db_name",
 charset="utf8"
)
self.cursor = self.db.cursor()

def close(self):
self.db.close()

def create_table(self):
self.open()
# 如果数据表已经存在使用 execute() 方法删除表。
       self.cursor.execute("DROP TABLE IF EXISTS mysql_demo")

# 创建数据表SQL语句
       sql = """CREATE TABLE mysql_demo (
                FIRST_NAME  CHAR(20) NOT NULL,
                LAST_NAME  CHAR(20),
                AGE INT,  
                SEX CHAR(1),
                INCOME FLOAT )"""

       cursor.execute(sql)
self.close()

def create_record(self):
self.open()
# SQL 插入语句
       sql = """INSERT INTO mysql_demo(FIRST_NAME,
                LAST_NAME, AGE, SEX, INCOME)
                VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
       try:
# 执行sql语句
           self.cursor.execute(sql)
# 提交到数据库执行
           self.db.commit()
except:
# Rollback in case there is any error
           self.db.rollback()

# 关闭数据库连接
       self.close()

def delete_record(self):
self.open()
self.cursor.execute('delete from mysql_demo')
self.db.commit()
self.close()

def query_record(self):
self.open()
count = self.cursor.execute('select * from mysql_demo')
results = self.cursor.fetchall()
print(results)
self.close()

数据库里的类型,不同关系数据库中有出入的,比如mysql有4种int,主要在存储字节数的差别。

bigint 
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 
int 
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 
smallint 
从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 
tinyint 
从 0 到 255 的整型数据。存储大小为 1 字节。 

char与varchar的区别在于varchar是动态长度,这样可以省空间,但相对char会慢一些。

关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多