因此,我是一名相当新的程序员,致力于本科Comp Sci学位,并且工作经验非常少.在为我的课程寻找实习型工作时,我注意到我从几位教授那里听到的 - "使用数据库占所有现代计算机科学工作的90%" - 看起来确实如此.但是,我的课程直到第3年才开始有任何数据库课程,所以我试着至少自己学习一些东西.
对于像我这样的人,我在SO和互联网上看到的很少.关于如何在数据库中读取和写入数据的机制似乎有大量的教程,但关于相关的最佳实践却很少.为了展示我正在谈论的内容,并帮助我解决实际问题,可以在互联网上轻松找到:
public static void Main ()
{
using (var conn = new OdbcConnection())
{
var command = new OdbcCommand();
command.Connection = conn;
command.CommandText = "SELECT * FROM Customer WHERE id = 1";
var dbAdapter = new OdbcDataAdapter();
dbAdapter.SelectCommand = command;
var results = new DataTable();
dbAdapter.Fill(results);
}
// then you would do something like
string customerName = (string) results.Rows[0]["name"];
}
Run Code Online (Sandbox Code Playgroud)
等等.这很容易理解,但显然有很多问题.我开始使用这样的代码,很快就开始说"好像只是让SQL到处都是愚蠢的,我应该把所有这些都放在一个常量文件中." 然后我意识到,在整个地方使用相同的代码行并将所有内容与连接对象等放在方法中是很愚蠢的:
public DataTable GetTableFromDB (string sql)
{
// code similar to …Run Code Online (Sandbox Code Playgroud) 我正在维护一个Python脚本,用于xlrd从Excel电子表格中检索值,然后使用它们执行各种操作.电子表格中的某些单元格是高精度数字,它们必须保持不变.当检索其中一个单元格的值时,xlrd给我一个float如0.38288746115497402.
但是,我需要在代码中稍后将此值转换为字符串.做任何一个str(value)或unicode(value)将返回类似"0.382887461155"的内容.要求说这是不可接受的; 精度需要保持.
到目前为止,我已经尝试了几件事,但没有成功.第一个是使用字符串格式化的东西:
data = "%.40s" % (value)
data2 = "%.40r" % (value)
Run Code Online (Sandbox Code Playgroud)
但两者都产生相同的舍入数,"0.382887461155".
在SO和其他地方搜索有类似问题的人时,一个常见的建议是使用该Decimal课程.但是我不能改变数据给我的方式(除非有人知道xlrd返回Decimals 的秘密方法).当我尝试这样做时:
data = Decimal(value)
Run Code Online (Sandbox Code Playgroud)
我得到了TypeError: Cannot convert float to Decimal. First convert the float to a string.但显然我无法将其转换为字符串,否则我将失去精度.
所以,是的,我愿意接受任何建议 - 如果有必要的话,甚至是非常粗暴/粗暴的建议.我对Python(我自己更多的是Java/C#家伙)并不是非常有经验,所以如果我在这里遇到某种基本的误解,请随时纠正我.
编辑:我想我会补充说我使用的是Python 2.6.4.我认为没有任何正式要求阻止我改变版本; 它只是不必弄乱任何其他代码.
对于模糊的标题感到抱歉,但我不确定如何用一个短语来概括这一点.我有一个带有大量冗余C#代码的情况,它看起来像使用某些继承属性或泛型的某种狡猾技巧可以解决这个问题.但是,我不是一个非常有经验的程序员(尤其是使用C#)而且我看不到解决方案.
简化形式的情况看起来像这样.我有一堆类都继承自一种类型.
public class Foo : SuperFoo
{
...
public Foo SomeMethod() { ... }
}
public class Bar : SuperFoo
{
...
public Bar SomeMethod() { ... }
}
public class Baz : SuperFoo
{
...
public Baz SomeMethod() { ... }
}
...
public class SuperFoo
{
...
}
Run Code Online (Sandbox Code Playgroud)
当需要处理这些对象的集合时会出现问题.我的初稿解决方案(坏的解决方案)看起来像这样:
public void SomeEventHasHappened(...)
{
ProcessFoos();
ProcessBars();
ProcessBazes();
...
}
public void ProcessFoos()
{
...
foreach (var foo in fooList)
{
...
foo.SomeMethod();
}
}
public void ProcessBars()
{ …Run Code Online (Sandbox Code Playgroud)